Javascript 一个接一个的承诺

Javascript 一个接一个的承诺,javascript,reactjs,axios,Javascript,Reactjs,Axios,所以我想通过axios从我的数据库中获取一些东西,如下[顺序]: 问题 选择 答案 我可以用这个: // Get Questions axios.get(url_here) .then(res => { if (res.status === 200) { // Save Questions... // Get Choices axios.get(url_here)

所以我想通过axios从我的数据库中获取一些东西,如下[顺序]:

问题 选择 答案 我可以用这个:

// Get Questions
    axios.get(url_here)
    .then(res => {
        if (res.status === 200) {
            // Save Questions...
            // Get Choices
            axios.get(url_here)
            .then(res => {
                if (res.status === 200) {
                    // Save Choices...
                    // Get Answers
                    axios.get(url_here)
                    .then(res => {
                        if (res.status === 200) {
                            // Save Answers
                        }
                    })
                }
            })
        }
    })
但从外观上看,这段代码肯定会以某种方式失败

如果我这样做:

// Get Questions
axios.get(url_here)
.then(res => {
    if (res.status === 200) {
        // Save Questions...
    }
})

// Get Choices
axios.get(url_here)
    .then(res => {
        if (res.status === 200) {
            // Save Choices...
        }
})
    
// Get Answers
axios.get(url_here)
.then(res => {
    if (res.status === 200) {
        // Save Answers
    }
})
无论Get问题是否成功,都可以调用Get选项。 如果Get问题在请求中成功,我想获得等待和倾听的选择,我该如何做

非常感谢

您可能想看看Promise.all:

或者了解async await:

您可能希望了解Promise.all:


或者了解异步等待:

我的建议是使用异步等待

const getQuestions = await axios.get(url);
if(getQuestions){
 const getchoices = await axios.get(url);
}

记住wait只能在异步函数中使用

我的建议是使用异步wait

const getQuestions = await axios.get(url);
if(getQuestions){
 const getchoices = await axios.get(url);
}

记住wait只能用于异步函数

此代码注定会以某种方式失败-代码以何种方式失败?如果要等到异步操作完成后再执行下一个操作,则.then回调正好是您要放置下一个操作的位置。您也许可以通过使用wait来清理它,而不是将承诺链接起来,但最终的逻辑是相同的。那到底是怎么回事?@David哦,对不起。对我来说,它看起来真的像一个带有嵌套axios调用的意大利面代码,我一看就有点害怕。不管怎样,过去有人告诉我,我只能使用wait或。然后,因为我不能将axios的一种用途与其他用途混合使用。然后。如何使用await执行代码,但仍然使用axios?您不需要。如果您使用await。之后发生的一切都是隐式的。您只需在此处执行类似于let res=wait axios.geturl_的操作;然后你会得到res中.get调用的结果。这段代码肯定会以这样或那样的方式失败——代码以什么方式失败了?如果要等到异步操作完成后再执行下一个操作,则.then回调正好是您要放置下一个操作的位置。您也许可以通过使用wait来清理它,而不是将承诺链接起来,但最终的逻辑是相同的。那到底是怎么回事?@David哦,对不起。对我来说,它看起来真的像一个带有嵌套axios调用的意大利面代码,我一看就有点害怕。不管怎样,过去有人告诉我,我只能使用wait或。然后,因为我不能将axios的一种用途与其他用途混合使用。然后。如何使用await执行代码,但仍然使用axios?您不需要。如果您使用await。之后发生的一切都是隐式的。您只需在此处执行类似于let res=wait axios.geturl_的操作;然后您将得到res中.get调用的结果。我可以同时使用async和.then吗?过去有人告诉我,我不能把一个和另一个混在一起。你可以,但你不想。我能同时使用异步和吗?过去有人告诉我,我不能把两者混为一谈。你可以,但你不想。