我在使用异步函数时遇到了一些问题(在functionSync1内部有一个异步函数)。 我有以下代码:
main() {
functionSync1();
functionSync2();
}
functionSync1() {
console.log('start');
let promise =
Promise.resolve(this.localStorage.getItem('myItem').toPromise());
promise.then((val) => console.log(val));
}
functionSync2() {
console.log('end');
}
由于某些原因,我无法修改main()
的代码,因此我想修改functionSync1()
,以等待函数结束直到执行console.log(val)
。
现在console.log('end')
在console.log(val)
之前执行,因此输出为:
start
end
myItemValue
我需要这个:
start
myItemValue
end
有什么想法吗?
答案 0 :(得分:1)
您可以使用承诺队列创建您描述的输出:
const queue = Promise.resolve();
function enqueue(task, ...args) { return queue = queue.then(() => task(...args)); }
functionSync1(){
console.log('start');
enqueue(() => this.localStorage.getItem('myItem').toPromise())
.then((val) => console.log(val));
}
functionSync2(){
enqueue(() => console.log('end'));
}
但是您实际上应该只更改main
。其他一切都是解决方法。