具有内部异步功能的多个同步功能

时间:2019-05-01 09:31:09

标签: javascript angular function asynchronous

我在使用异步函数时遇到了一些问题(在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

有什么想法吗?

1 个答案:

答案 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。其他一切都是解决方法。