对于promises,是否有一种可以接受的方法将多个参数传递给promise链中的下一个函数?
一些背景知识:
我有一个项目,我们使用promises来处理对数据库的异步调用。我在我们正在使用的库中有一个函数,大致是这样的形式:
executeSql(statement, options, successCallback, failCallback)
由于这是一长串的承诺,我需要把它变成一个承诺,所以我可以。然后它。
我尝试了以下内容:
$q(function(resolve, reject) {
executeSql(statement, options, resolve, reject);
}).then(function(tx, results) {
alert(tx);
alert(results);
}
第一个参数很好,但第二个参数没有。如果我这样做:
executeSql(statement, options, function(tx, results) {
alert(tx);
alert(results);
}, null);
一切都按预期工作。
似乎承诺只向下一个.then函数发送一个参数。不幸的是,由于第一个是我不关心的,只有一个被发送,我无法访问结果。
我有针对这个具体问题的解决方法,但我的一般问题仍然存在。
作为参考,解决方法是:
$q(function(resolve, reject) {
executeSql(statement, options, function(tx, results) {
resolve(results);
}, reject);
});
但这只有效,因为我只关心在这种特殊情况下传递结果。
答案 0 :(得分:2)
根据AngularJS $q API,您只能将单个参数传递给resolve函数。因此,为了传递多个变量,您必须将它们包装在一个对象中。即你可以打电话:
resolve({'tx':tx, 'results':results})
然后您的函数看起来像:
.then(function(wrapperObj) {
alert(wrapperObj.tx);
alert(wrapperObj.results);
})