Javascript Обещание цепочки не работает, как ожидалось - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь вернуть обещание внутри обещания, но не могу заставить его работать. Вот мой код

async function main() {
  return new Promise((resolve, reject) => {
    p = new Promise((resolve, reject) => {
      f2(async() => {
        resolve();
      });
    });
    array = [];
    array.push(p);
    Promise.all(array).then(resolve(1));
  });
}
setTimeout(async() => {
  console.log(await main());
}, 0);

function f2(callback) {
  console.log("h called");
  setTimeout(() => {
    callback();
  }, 4000);
}

Я ожидаю, что он будет разрешен после истечения времени ожидания в f2(), но оно разрешается мгновенно. Любая помощь будет оценена

1 Ответ

1 голос
/ 16 апреля 2020

Функция разрешения вызывается сразу, попробуйте что-то вроде этого:

Promise.all(array).then(() => {
    resolve(1);
});

Редактировать: я хотел добавить, что то, что передается обратному вызову обещания then (), является оператором, используя resolv (1) - это вызов для выполнения этого кода, но, обернув этот вызов функции в объявление анонимной функции, передается все объявление функции, а затем вызывается при необходимости.

...