Сцепление обещаний с обещанием всех результатов в неожиданном порядке исполнения - PullRequest
4 голосов
/ 08 октября 2019

Почему следующий код печатает baz, done перед 1, 2, 3?

const bar = () => Promise.resolve([1, 2, 3]);
const cat = e => {
  console.log(e);
  return Promise.resolve(e);
};
const foo = () =>
  bar()
    .then(arr => Promise.all(arr.map(e => cat(e))))
    .then(console.log("baz"));

foo().then(console.log("done"));

Ответы [ 2 ]

5 голосов
/ 08 октября 2019

Вы выполняете console.log () немедленно, а не передаете его функции обратного вызова в .then (). Это сделает это:

const bar = () => Promise.resolve([1, 2, 3]);

const cat = e => {
  console.log(e);
  return Promise.resolve(e);
};

const foo = () =>
  bar()
    .then(arr => Promise.all(arr.map(e => cat(e))))
    .then(() => console.log("baz"));
    
foo().then(() => console.log("done"));
0 голосов
/ 08 октября 2019

Возможно, вы забыли встроить console.log в функции стрелок, чтобы их выполнение было правильно отложено:

const bar = () => Promise.resolve([1, 2, 3]);
const cat = e => {
  console.log(e);
  return Promise.resolve(e);
};
const foo = () =>
  bar()
    .then(arr => Promise.all(arr.map(e => cat(e))))
    .then(() => console.log("baz"));

foo().then(() => console.log("done"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...