【发布时间】:2014-12-10 06:06:15
【问题描述】:
我跟踪了两个异步操作,然后定义了最终的 onResult 和 onFault。如何链接两个异步操作getConnection,然后select,最后调用onResult 或onFault
编辑需要帮助来保证以下序列。
new Promise(this.getConnection)
.then(this.select)
.then(this.onResult)
getConnection: function(resolve, reject) {
console.log('get connection')
if(database = common.model.connections.Sync.getConnection()) {
database.transaction(function(transaction){
resolve(transaction);
});
} else {
reject("Connection Error");
}
},
select: function(transaction) {
console.log('select', transaction)
var self = this;
var query = "SELECT * FROM configuration WHERE key = 'schedule'";
self.transaction.executeSql(query, [], function(transaction, resultSet){self.selectTransactionComplete(transaction, resultSet)}, function(){self.selectTransactionError()});
},
selectTransactionComplete: function(transaction, resultSet) {
console.log('select transaction complete')
if(resultSet.rows.length == 0) {
this.onResult(false);
} else if(new Date().getTime() - new Date(common.Config.getLastSync()).getTime() > resultSet.rows.item(0).value) {
this.onResult(true);
}
},
selectTransactionError: function(error) {console.log(this.constructor.NAME, this.selectSQL); console.log(error);},
onResult: function(data) {
console.log(data);
},
onFault: function(info) {
console.log(info)
}
【问题讨论】:
-
您似乎正在使用回调之类的承诺。不;而是返回它们。例如,
asyncAction应该返回一个承诺或将两个参数(两者都不能直接抛出)传递给then。 -
删除了 asyncAction,因为它超出了范围,我如何通过这两个异步操作从
getConnection到达onResult调用 -getConnection和select,就像这里 @987654322 @(排队异步操作) -
感谢在我的示例上下文中使用书面代码的任何帮助,我已经阅读了文章,理解了单个异步但仍然对多个排队异步操作感到困惑和困惑,我注意到
Promise.all但不确定是否这将适用于我的情况 -
在阅读了几件事后,请在下面的回答中查看我的尝试,这是应该的吗?
标签: javascript promise es6-promise