我嵌套了一个 Promise,其中一个函数调用另一个函数并且两个函数都返回 Promise。函数 b
正在调用函数 a
,当函数 a
的 Promise 完成时,函数 b
解析其自己的延迟并传递 a
的结果及其自己的结果。
function a(){
var d = $.Deferred();
makeSomeAsyncCall(function(){
d.resolve('a')
})
return d.promise();
}
function b(){
var d = $.Deferred();
a= a()
a.done(function(a){d.resolve(a, 'b')})
.fail(function(a){d.reject(a, 'b')})
return d.promise();
}
b().done(function(a, b){console.log(a, b)})
.fail(function(a, b){console.log(a, b)})
我想知道是否有办法在不创建延迟函数的情况下解决这个问题 b
最佳答案
I wonder if there is way to wright this without creating a deferred in function b
是的,有。链接两个(可能异步)函数是 main promise 的唯一目的方法,then
(在旧版本中称为pipe
)。简单写一下
function b() {
return a().then(function success(aresult) {
return [aresult, "b"];
}, function error(aerror) {
return $.Deferred().reject(aerror, "b");
});
}
我不确定您是否真的需要该error
处理程序,如果您不指定它,那么aerror
将自动传播。
关于javascript - 返回 promise 的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19939025/