我有一些要理解的JavaScript代码。我有一个返回Promise的函数,在then
块之一中,我有一个axios.post
(来自axios库)。运行此功能时,在控制台中,我看到“完成此处”,但从未看到“发布完成”。我认为那是因为函数在axios.post响应返回之前完成了?那是对的吗?如果我也想在控制台中显示“发布完成”怎么办?
function X () {
return new Promise((resolve, reject) => {
if (x) {
...
resolve();
} else {
...
reject();
}
}).then(() => {
axios.post(
url,
data
).then((response) => {
...
console.log("post complete");
});
}).then(() => {
...
console.log("finish here");
});
}
答案 0 :(得分:2)
您没有将axios承诺退还至主要承诺链。无论如何,您真的不应该嵌套这样的承诺;如果then或catch回调返回一个promise,它将冒泡到主链,并且可以从那里直接链接。尝试以下方法:
function X () {
return new Promise((resolve, reject) => {
if (x) {
///...
resolve();
} else {
///...
reject();
}
})
.then(() => axios.post(url, data))
.then(response => {
//...
console.log("post complete");
})
.then(() => {
///...
console.log("finish here");
});
}