Javascript AngularJS:将附加参数传递给链接承诺
我想链接一些由服务返回的承诺。只要返回承诺的某些方法不需要额外的参数,这就行了。这是我的例子:Javascript AngularJS:将附加参数传递给链接承诺,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我想链接一些由服务返回的承诺。只要返回承诺的某些方法不需要额外的参数,这就行了。这是我的例子: var first = function() { var d = $q.defer(); $timeout(function() { d.resolve("first resolved") }, 100) return d.promise; }; var second = function(val) { console.log("value of val: ", val)
var first = function() {
var d = $q.defer();
$timeout(function() {
d.resolve("first resolved")
}, 100)
return d.promise;
};
var second = function(val) {
console.log("value of val: ", val);
var d = $q.defer();
$timeout(function() {
d.resolve("second resolved")
}, 200)
return d.promise;
};
first().then(second).then(function(value) {
console.log("all resolved", value);
});
这正如预期的那样有效。但是,如果我的服务second
需要一个额外的参数val
来完成它的工作,该怎么办?使用上述方法,val
的值是第一次解析的值
,因为它是从第一次
获得解析值的
有没有办法不嵌套这样的匿名函数:
first().then(function() {
return second("foobar").then(function(value) {
console.log("all resolved", value);
});
});
我正在考虑使用$q.all
,但是我想你不能为你的承诺指定一个订单。当然。第一种方式:
first()
.then(function() {
return second("foobar");
})
.then(function(value) {
console.log("all resolved", value);
});
第二种(更简单)方法:
不客气。重要的是,您必须始终记住,函数只能由承诺调用。因此,如果需要其他参数或需要使用给定值执行某些操作,则必须将其包装或绑定,然后将普通函数传递给
调用。然后该函数可以返回另一个承诺。@Mawg在这种情况下,您应该返回一个包含所需值的对象或数组。您能举一个例子,说明一个非常小的Mawg吗?;-)$timeout
已经返回了一个承诺,不需要$q.defer
我知道,这只是为了演示。在我的真实案例中,我有一个http调用,然后对数据进行一些处理。所以我确实需要额外的$q.defer
uhh$http也已经返回了一个承诺,您可以。然后对其进行额外处理并返回该承诺。。。无法对我没有看过的代码做出判断,但它听起来仍然像是延迟反模式。您只需要$q.defer
,就可以对回调API进行操作。
first()
.then(second.bind(null, "foobar"))
.then(function(value) {
console.log("all resolved", value);
});