Val*_*lli 39 javascript promise
我有这样的功能:
function top() {
//promise1
ParentPromise({
...some code here...
}).then(function() {
//promise2
ChildPromise({
..some code here...
}).then(function(response) {
var result = response.result.items;
});
});
};
Run Code Online (Sandbox Code Playgroud)
我需要以这种方式返回结果值:
var myresult = start();
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?谢谢
Kat*_*314 34
承诺的定义是你不能真正地分配result给myresult.但是,您可以做出myresult直接解析result为调用者的承诺,但是许多承诺被用来实现.基本思想是在上面的块中的每个函数内部,你应该是return链中的下一个Promise.例如:
function top() {
//promise1
return ParentPromise({
...some code here...
}).then(function() {
//promise2
return ChildPromise({
..some code here...
}).then(function(response) {
var result = response.result.items;
return result;
});
});
};
Run Code Online (Sandbox Code Playgroud)
最后,代码调用top()将不知道或关心1,2或12个链式承诺被用于获取result.它还能够在任何承诺失败的情况下注册错误回调.
Eri*_*wan 20
不太确定这是否适用于原生JS承诺,但是PromiseKit(快速...我知道,但我很确定这应该有用)我习惯于返回第二个承诺,并将其链接如下:
function top() {
//promise1
return ParentPromise({
...some code here...
}).then(function() {
//promise2
return ChildPromise({
..some code here...
})
}).then(function(response) {
var result = response.result.items;
// do something with `result`
return result;
});
}
top().then(function(result){
// all done
});
Run Code Online (Sandbox Code Playgroud)
或者用ES6/lambda表示法;
function top() {
return ParentPromise().then(_ => {
return ChildPromise()
}).then(response => {
return response.result.items
})
}
top().then(items => {
// all done
})
Run Code Online (Sandbox Code Playgroud)