Javascript 承诺可以';t在解析/拒绝后运行代码

Javascript 承诺可以';t在解析/拒绝后运行代码,javascript,reactjs,promise,Javascript,Reactjs,Promise,我在异步函数中有异步函数。在第二种情况下,我必须等待承诺解决或拒绝,然后运行下面的其他代码。但是如果承诺拒绝我的代码停止,并且不运行其他函数。我怎么能修好它 await axios.all(promises).then(res => { axios.patch("/url", { foo: bar }).then(async () => { const promises2 = arr.map(item => { return axios.post("/u

我在异步函数中有异步函数。在第二种情况下,我必须等待承诺解决或拒绝,然后运行下面的其他代码。但是如果承诺拒绝我的代码停止,并且不运行其他函数。我怎么能修好它

await axios.all(promises).then(res => {
  axios.patch("/url", { foo: bar }).then(async () => {
    const promises2 = arr.map(item => {
      return axios.post("/url-2", item)
    });
    await Promise.all(promises2)
      .then(() => console.log("resolved")) //this not calling ever
      .catch(() => console.log("failed")) //this not calling ever

    console.log("This console log ever not working")
  })
})

承诺未正确链接,
axios.patch(…)
promise未返回
await
then
catch
的语法糖,其目的是尽可能地去掉嵌套函数。应该是:

const res = await axios.all(promises)
await axios.patch("/url", { foo: bar })

const promises2 = arr.map(item => {
  return axios.post("/url-2", item)
});

try {
  await Promise.all(promises2)
  console.log("resolved"))
} catch (err) {    
  console.log("failed");
}

承诺未正确链接,
axios.patch(…)
promise未返回
await
then
catch
的语法糖,其目的是尽可能地去掉嵌套函数。应该是:

const res = await axios.all(promises)
await axios.patch("/url", { foo: bar })

const promises2 = arr.map(item => {
  return axios.post("/url-2", item)
});

try {
  await Promise.all(promises2)
  console.log("resolved"))
} catch (err) {    
  console.log("failed");
}

您的代码顺序错误。当然,如果第一个承诺被拒绝,那么其余的承诺将不会被调用

尝试以以下方式重写代码:

let res = await axios.all(promises).catch(() => { console.log("failed"); return false; });

if (!res) {
    // Do something when rejected
    ....
}

// Call the 2nd promise
let res2 = await axios.path("/url", {foo: bar}).catch(() => {console.log("failed 2"); return false; });

if (!res2) {
    // Do something when the 2nd promise is rejected
    ...
}

// Call your last promise
let res3 = await Promise.all(promises2).catch(() => {console.log("failed 3"); return false; });

if (!res3) {
    // Do something if it is rejected again
    ....
}
// Otherwise, do your thing

您的代码顺序错误。当然,如果第一个承诺被拒绝,那么其余的承诺将不会被调用

尝试以以下方式重写代码:

let res = await axios.all(promises).catch(() => { console.log("failed"); return false; });

if (!res) {
    // Do something when rejected
    ....
}

// Call the 2nd promise
let res2 = await axios.path("/url", {foo: bar}).catch(() => {console.log("failed 2"); return false; });

if (!res2) {
    // Do something when the 2nd promise is rejected
    ...
}

// Call your last promise
let res3 = await Promise.all(promises2).catch(() => {console.log("failed 3"); return false; });

if (!res3) {
    // Do something if it is rejected again
    ....
}
// Otherwise, do your thing

试一下这段代码,它应该指出错误或拒绝发生的地方(即肯定在
Promise.all(promises2)
运行之前)

await axios.all(promises)
.then(res => axios.patch("/url", { foo: bar }), err => {
    throw `all(promises) failed with ${err}`;
})
.then(() => {
    const promises2 = arr.map(item => {
        return axios.post("/url-2", item);
    });
    return Promise.all(promises2)
    .then(() => console.log("resolved")) //this not calling ever
    .catch(err => {
        throw `all(promises2) failed with ${err}`;
    });
}, err => {
    throw `patch failed with ${err}`;
})
.catch(err => console.error(err));

注意,我已经删除了async/await,因为在您发布的代码中,它完全没有必要

尝试此代码,它应该指出错误或拒绝发生的位置(即,它肯定在
Promise.all(promises2)
运行之前)

await axios.all(promises)
.then(res => axios.patch("/url", { foo: bar }), err => {
    throw `all(promises) failed with ${err}`;
})
.then(() => {
    const promises2 = arr.map(item => {
        return axios.post("/url-2", item);
    });
    return Promise.all(promises2)
    .then(() => console.log("resolved")) //this not calling ever
    .catch(err => {
        throw `all(promises2) failed with ${err}`;
    });
}, err => {
    throw `patch failed with ${err}`;
})
.catch(err => console.error(err));

注意,我已经删除了async/wait,因为在您发布的代码中,它完全没有必要

您在
axios.all(promises)
axios.patch(“/url”,{foo:bar})
-所以我猜没有
返回axios.post(“/url-2”,item)
曾经被执行过,那么,为什么你在代码中使用async/await,而不是在console.log结束时暂停…似乎你在使用async/await,而实际上并不需要它。你可能需要返回wait Promise.all(promises2)和remove then/catch,在该命令中你要么在
axios.all被拒绝(承诺)
axios.patch(“/url”,{foo:bar})
-所以我猜没有
返回axios.post(“/url-2”,项目)
曾经被执行过,那么,为什么你在代码中使用async/await,而不是在console.log结束时暂停…似乎你在使用async/await,而实际上并不需要它。你可能需要返回wait Promise.all(promises2)和remove then/catch,以这种方式使用promises2 not send post我不明白你这样说的话与允诺分开2不发送邮件(拒绝)和其他的话或不起作用我不明白你说的话