使用promise设置一个variables来获得callback函数的返回值

我正在获取“对象”值而不是确切的值。 如何获得使用callback函数返回的值?

function loadDB(option, callBack){ var dfd = new jQuery.Deferred(), db = window.openDatabase('mydb', '1.0', 'Test DB', 1024*1024), selectQuery = "SELECT log FROM LOGS WHERE id = ?"; db.transaction(function(tx){ tx.executeSql(selectQuery,[option],function(tx,results){ var retval; if( results.rows.length ) { retval = unescape(results.rows.item(0)['log']); } var returnValue = dfd.resolve(retval); }); }); return dfd.promise(); } results = loadDB(2).then(function(val){ return val; } ); console.log("response***",results); 

承诺就像一个封闭的盒子:

在这里输入图像描述

你的上面的代码与延期对象,创build框,并让你知道在未来的某个时间,你可以打开它。 那个时候上面的代码会调用.resolve

当你做results = loadDB(2)你正在结果框中

承诺也有一个方法,打开框,工作的价值,并返回值的另一个框(也打开任何额外的框)。 那么这个方法是:

在框中,它确实:

在这里输入图像描述 =>( 打开 。 => Ë )=> Ë

也就是说,它需要这个盒子,打开它并应用一个函数来处理它的值,然后返回另一个盒子上的新值。

所以,如果你想处理这个值,你需要钩住一个盒子打开的地方,就像Bergi所build议的那样:

 loadDB(2).then(function(val){ console.log("response***", val); }); // this also returns a promise btw 

您无法从承诺(这里是:asynchronous)上下文中获得parsing值。

相反,您将需要将console.log调用和依赖于其的所有其他信息移动承诺上下文中:

 loadDB(2).then(function(val){ console.log("response***", val); });