Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我怎样才能从一次捕获中回报承诺,然后拒绝下一次捕获?_Javascript_Asynchronous_Ecmascript 6_Promise - Fatal编程技术网

Javascript 我怎样才能从一次捕获中回报承诺,然后拒绝下一次捕获?

Javascript 我怎样才能从一次捕获中回报承诺,然后拒绝下一次捕获?,javascript,asynchronous,ecmascript-6,promise,Javascript,Asynchronous,Ecmascript 6,Promise,我有一个承诺链,它捕获错误,应该在该捕获中执行另一个异步操作(返回承诺),然后应该转到最后一个捕获,但我不知道如何做到这一点 const roses_color = "blue" new Promise((resolve, reject) => { (roses_color === "red") ? resolve("are") : reject("are not") }) .then((result) => new Promise((resolve, rejec

我有一个承诺链,它捕获错误,应该在该捕获中执行另一个异步操作(返回承诺),然后应该转到最后一个捕获,但我不知道如何做到这一点

const roses_color = "blue"

new Promise((resolve, reject) => {
    (roses_color === "red") ? resolve("are") : reject("are not")
})
.then((result) => 
    new Promise((resolve, reject) => {
        setTimeout(() => resolve(`Roses ${result} red`), 1000)
    })
)
.catch((error) => promiseWhichWillResolve())
.then((result) => res.send(`This is true: ${result}`))
.catch((error) => res.send(`ERROR: ${error}`))
这个的输出是

最终结果:玫瑰不是红色的

我希望的是,第一个捕获返回承诺,这将解决,但不知何故,不是去最后一个“然后”它应该去最后一个“捕获”

如果我用

.catch((error) => {
    promiseWhichWillResolve())
    throw error
}
这将导致不等待解决的承诺


我怎样才能做到这一点呢?

我刚刚意识到,通过在第一个catch中使用async/await,有一种非常简单的方法可以做到这一点。这将确保异步操作完成,然后抛出到最后一个捕获

const roses_color = "blue"

new Promise((resolve, reject) => {
    (roses_color === "red") ? resolve("are") : reject("are not")
})
.then((result) => 
    new Promise((resolve, reject) => {
        setTimeout(() => resolve(`Roses ${result} red`), 1000)
    })
)
.catch(async (error) => {
    await promiseWhichWillResolve()

    throw `Roses ${error} red`
})
.then((result) => res.send(`This is true: ${result}`))
.catch((error) => res.send(`ERROR: ${error}`))
输出

错误:玫瑰不是红色的

尝试以下方法

.catch((error) => promiseWhichWillResolve().then(() => Promise.reject(error)));

我认为你不能做一个
。然后在
之后做一个
。catch
也许可以试着修改你的案例顺序。你不应该那么做/catch@RedKnight91由于您在catch中使用promisehillresolve函数,如果它成功解决,那么它将进入下一个,所以我们应该切断promisehillresolve函数中的承诺链