你如何在这样的场景中链接?
api是一个在http请求后返回promise的函数 . auth是一个函数,在api响应后返回一个promise,如果第二次调用api,如果不是auth拒绝的话 .
我尝试过这个,但不仅仅是我回到了回调地狱,它不起作用 .
function api(query) {
return new Promise(function(resolve, reject) {
//DO SOME STUFF AND SOMETIMES resolves...
})
}
function auth() {
return new Promise(function(resolve, reject) {
api("/foo").then(function(asset1) {
api("/bar").then(function(asset2) {
resolve(asset2);
}).catch(function() {
reject();
})
}).catch(function(error) {
reject();
})
})
}
3 回答
我认为这应该对你有帮助 .
只是一个观察:
then
方法总是根据先前的承诺解析返回一个承诺 . 如果先前的承诺得到解决,它会将已解决的值传递给下一个承诺 . 否则它会将错误发送到catch
方法 .来自Promises standard:
下一个示例打印'finalVal':
据我所知,你想要做什么,下面的代码也将解决
asset2
. 除此之外,我猜api
函数正在执行http请求,因此您可以使用request-promise
lib而不是使用new Promise
事件转换回调api .有了这个调用者会做类似的事情:
如果调用
api
的顺序不重要,就像@styfle在评论中指出的那样,你可以用Promise.all
来编写它 .