【发布时间】:2016-05-02 02:36:04
【问题描述】:
我正在使用 jQuery 承诺从 web SQL 数据库表中返回数据集并使用$.when,我可以根据此链接返回数据集并在$.when 中使用它
Return multiple rows as an array from a WebSQL databse using javaScript
但是我如何在$.when 之外使用该数据集?
这里是查询的来源:
function getContacts(){
var defer = $.Deferred();
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM contacts', [], function(tx, results) {
defer.resolve(results.rows);
},function(tx, err){
alert("An internal error occurred. " + err.message);
});
});
return defer.promise();
}
这是在$.when 中返回和使用该值的来源:
var contact = getContacts();
$.when(contact).done(function(cont) {
for(var i = 0; i < cont.length; i++){
// can use the 'cont' variable to access data in the table
// inside this '$.when', but can't use it outside this $.when block
}
});
我怎样才能做到这一点?
【问题讨论】:
-
您不能真正在
$.when().done()回调之外使用它,因为这是您唯一可靠地知道它存在的地方。在其他任何地方,对于值何时准备就绪,时间是完全未知的。如果需要,您可以从其中调用任何其他函数并将数据传递给它,但这是您必须使用异步响应的方式。 -
我无法将数据集传递给 $.when().done() 内部的变量并在外部调用它。我可以吗?
-
对不起,我不明白你最后的评论是什么意思。理解 Promise 和异步编码的一个重要部分是
.done()处理程序在将来的某个时间被调用,而你真的不知道它什么时候会被调用。因此,您可以将结果存入.done()处理程序中的其他外部变量中,但您的其他代码不会等待数据存在,除非它本身是从.done()处理程序中调用的。 -
如果我使用变量来分配 $.when().done() 内部的数据并在外部使用它,我可以这样做吗?
-
否 - 不可靠。看来您只是不了解异步计时的问题。阅读关于 ajax 调用的 this answer 可能会有所帮助,但存在相同的异步问题。
标签: javascript jquery promise web-sql