【发布时间】:2015-02-21 18:17:59
【问题描述】:
我正在尝试将以下 javascript/jquery 代码转换为 dart,但我无法理解期货的工作原理。
function fnA() {
fnB().then(function() {
// do something
}
}
function fnB() {
var ret = $.Deferred();
_db.open(database_name).then(function() {
var defers = [];
_db.keys().forEach(function(key_name) {
var key_dfd = $.Deferred();
defers.push(key_dfd);
_db.getByKey(key_name).then(function(data) {
key_dfd.resolve(data);
});
});
$.when(defers).then(ret.resolve);
})
.fail(function() {
ret.reject();
});
return ret.promise();
}
我以为我可以像以下那样做,但它似乎不起作用:
(我在数据库中使用了草地)
void fnA() {
fnB().then((_) {
// Here, all keys should have been loaded
});
}
Future fnB() {
return _db.open().then((_) {
return _db.keys().forEach((String key_name) {
return _db.getByKey(key_name).then((String data) {
// do something with data
return data;
});
});
});
}
【问题讨论】:
-
您没有发现任何
defers中发生的错误!!!不要使用你自己的new Deferred,而只是返回你已经拥有的承诺……
标签: javascript jquery dart promise dart-async