JS一个then方法异步的问题
问题描述
开发的时候遇到一个场景,调用一个接口后在.then
中再调用另外一个接口后,再结束.then
方法后去继续执行后面的逻辑,但是并没有这样同步执行
问题根因
Promise.resolve('origin')
.then(
(string) =>
new Promise((resolve, reject) => {
setTimeout(() => {
string += 'aaa'
resolve(string)
}, 1)
})
)
.then((string) => {
sleep().then(() => {
return (string += 'bbb')
})
})
.then((string) => {
console.log(`result:${string}`)
})
function sleep() {
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, 500)
})
}
解决方法
Promise.resolve('origin')
.then(
(string) =>
new Promise((resolve, reject) => {
setTimeout(() => {
string += 'aaa'
resolve(string)
}, 1)
})
)
.then((string) => {
// 可以去掉 return 查看区别
return sleep().then(() => {
return (string += 'bbb')
})
})
.then((string) => {
console.log(`result:${string}`)
})
function sleep() {
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, 500)
})
}
最好还是使用async await
最好还是使用async await
最好还是使用async await