Изменение моих обратных вызовов, обещание асинхронного ожидания - PullRequest
0 голосов
/ 04 декабря 2018

Мой код:

Обратные вызовы:

const first = () => {
  console.log('first');
};
const second = (callback) => {
   setTimeout(() => {
    console.log('second');
    callback();
  }, 2000);
};
const third = () => {
   console.log('third');
};

first();
second(third);   OUTPUT: 'first', 'second', 'third'

Обещания:

const first = () => new Promise((resolve, reject) => {
  resolve('first');
});
const second = () => new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('second');
  }, 2000);
});
const third = () => {
  console.log('third');
};

first()
 .then((firstPromiseValue) => {
   console.log(firstPromiseValue);
   second()
    .then((secondPromiseValue) => {
      console.log(secondPromiseValue);
      third();
    })
 });   OUTPUT: 'first', 'second', 'third'

Обещаниевсе:

const first = new Promise((resolve, reject) => {
  resolve('first');
});
const second = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('second');
  }, 2000);
});
const third = new Promise(function(resolve, reject) {
  resolve('third');
});
Promise.all([first, second, third]).then((values) => {
  console.log(values);
}); OUTPUT: ['first', 'second', 'third']

Async Await:

Как преобразовать этот код выше с помощью async await?

Какой хороший потокконтроль за приложениями javascript?

Как насчет некоторой асинхронной библиотеки, которая использует такие методы, как async.waterfall и т. д.

Кстати, мой код выше в порядке или нет?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Как преобразовать этот код с помощью async await?

Использование async/await - это еще один способ использования Promises.Это очень хорошая визуализация, потому что вы не проиграли в then/catch, но вы можете использовать его.Здесь у вас есть два примера.Первый с потом, а второй без.

const first = async (value) => {
  return new Promise((resolve, reject) => {
    resolve('first ');
  });
};
const second = async (value) => {
  return new Promise((resolve, reject) => {
    resolve(value + 'second ');
  });
};
const third = async (value) => {
  return new Promise((resolve, reject) => {
    resolve(value + 'third');
  });
};


first('').then(second).then(third).then( value => console.log(value) );

const first = async () => {
  return new Promise((resolve, reject) => {
    resolve('first ');
  });
};
const second = async () => {
  return new Promise((resolve, reject) => {
    resolve('second ');
  });
};
const third = () => {
  return 'third';

};

async function main() {
  
  let firstValue = await first();
  
  let secondValue = await second();
  
  let thirdValue = third();
  
  return  firstValue + ' ' + secondValue + ' ' + thirdValue;
}

main()
  .then(console.log)
  .catch(err => { console.log('Error:', err) });

Какое хорошее управление потоком для приложений javascript?

Обычно, когда вам нужно использовать Promise в середине функцииили несколько асинхронных вызовов для функций.

Как насчет некоторой асинхронной библиотеки, которая использует такие методы, как async.waterfall и т. д.

Я не знаю ни о какой библиотекеиспользуйте async / await.Извините!

0 голосов
/ 04 декабря 2018

Как преобразовать этот код с помощью async await?

async/await не является заменой для обещаний, это замена для then() и catch().Вы все еще будете использовать обещания.Таким образом, вы бы взяли определение first, second и third из раздела Обещания, а затем:

async function firstSecondThird() {
  let firstPromiseValue = await first();
  console.log(firstPromiseValue);
  let secondPromiseValue = await second();
  console.log(secondPromiseValue);
  third(); // not a promise, no need to await
}
firstSecondThird();

Какое хорошее управление потоком данных для приложений javascript?

Объективно, ни один из них не лучше;но async/await является наиболее читабельным, обратные вызовы - наиболее явными (с кодом then в середине).

Как насчет некоторой асинхронной библиотеки, которая использует такие методы, как async.waterfall и т. д.

Обещания обычно делают все, что делают эти библиотеки, а также отбираются для стандартизации.Вы можете забыть об этих библиотеках, если вы не поддерживаете старый код, который требует их.

Кстати, мой приведенный выше код в порядке или нет?

Кажется,делать то, что вы хотите, более или менее без явных проблем в эффективности или разборчивости.Я бы сказал, что все в порядке.

...