使用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); });