我有两个请求和一些函数要在它们之间调用。流程是当第一个promise被调用并完成时,无论结果是什么(成功或失败),都应该调用一些非promise相关函数,并且只有在我们应该调用第二个promise之后。所以这就是我最终做到的方式,这看起来不是一个好的解决方案。
funtionReturnsPromise()
.then(()=>{})
.catch(()=>{})
.then(()=>{
nonPromiseRelatedFuntion()
})
.then(()=>{
return funtionReturnsPromise2()
})
答案 0 :(得分:0)
由于所需的流程为:
Promise > Function > Promise
无论第一个承诺的结果如何,执行该函数,您只需执行以下操作:
function secondFunction(outcome) {
// do stuff
return funtionReturnsPromise2()
}
functionReturnsPromise().then(secondFunction).catch(secondFunction)
现在,关于另一个话题,我不会将第二个函数称为“无关”,因为根据你的解释,它很明显需要在第一个承诺完成后调用。
答案 1 :(得分:0)
假设nonPromiseRelatedFuntion
是同步的,并且您对functionReturnsPromise
functionReturnsPromise()
.then(
// no matter what happens, the function is invoked
() => { nonPromiseRelatedFunction() },
error => {
nonPromiseRelatedFunction()
// do error handling from functionReturnsPromise
}
)
.then(() => functionReturnsPromise2() }
.catch(console.error)
如果您需要值:
functionReturnsPromise()
.then(
value => {
nonPromiseRelatedFunction()
return functionReturnsPromise2(value)
},
error => {
nonPromiseRelatedFunction()
// do error handling from functionReturnsPromise
}
)
.catch(console.error) // error handling from functionReturnsPromise2
答案 2 :(得分:0)
像其他答案一样,我假设
读完 ALL 对问题的评论后,我看到上述情况毕竟不是假设
最简单的解决方案是摆脱第一个.then
funtionReturnsPromise()
.catch(()=>{})
.then(()=>{
nonPromiseRelatedFuntion()
})
.then(()=>{
return funtionReturnsPromise2()
})
注意:可以编写此类代码
funtionReturnsPromise()
.catch(()=>{})
.then(nonPromiseRelatedFuntion)
.then(funtionReturnsPromise2)
当然,最后两个函数将接收参数,但如果这些函数中的代码无论如何都忽略了参数,那么它们就没有问题了