Несколько функций синхронизации с внутренними асинхронными функциями - PullRequest
0 голосов
/ 01 мая 2019

У меня небольшая проблема с асинхронными функциями (внутри функции Sync1 есть функция асинхронности).У меня есть этот код:

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 Ответ

1 голос
/ 01 мая 2019

Вы можете создать вывод, который вы описываете, используя очередь обещаний:

  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. Все остальное - обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...