使用$ q promises,将参数传递给下一个函数

时间:2015-09-16 15:48:24

标签: javascript angularjs

对于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);
 });

但这只有效,因为我只关心在这种特殊情况下传递结果。

1 个答案:

答案 0 :(得分:2)

根据AngularJS $q API,您只能将单个参数传递给resolve函数。因此,为了传递多个变量,您必须将它们包装在一个对象中。即你可以打电话:

resolve({'tx':tx, 'results':results})

然后您的函数看起来像:

.then(function(wrapperObj) {
  alert(wrapperObj.tx);
  alert(wrapperObj.results);
})