Разница между функцией обратного вызова и Promise и Async Awit - PullRequest
2 голосов
/ 08 мая 2019

Я понимаю функцию обратного вызова, но не могу понять метод обещания и async и await.why, чтобы использовать эти три функции в узле js.can дать объяснение для примера кода.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Функция обратного вызова

var fs = require('fs');

fs.readFile(fileName, 'utf8', function read(err, contents) {
   console.log(contents);
});

console.log('after calling readFile');

Здесь функция read (err, contents) {} - это функция обратного вызова, которая распечатывает содержимое после завершения чтения файла.Но проблема в некоторых случаях может быть в том, что «после вызова readFile» отображается на консоли перед чтением файла.Поскольку узел Js выполняет оператор в асинхронном режиме.

Promise

var fs = require('fs');
function readMyFile(fileName)
{
   return new Promise(function(resolve,reject)
   {
      fs.readFile(fileName, 'utf8', function read(err, contents) {
      if(err)
            reject(err)
      else
            resolve(contents)
   });
   }
}

var file = readMyFile(fileName).then(result=>{console.log(result);console.log('after calling readFile');  }).catch(err=>{console.log("Error Occurred",err)});
console.log(file);

Здесь функция readMyFile (fileName) - это функция, которая возвращает обещание, печатает содержимое в блоке, а затемотображает ошибку в блоке catch.Но здесь строка console.log (file); выполняется без ожидания определения файловой переменной

Async / Await

var fs = require('fs');
function readMyFile(fileName)
{
   return new Promise(function(resolve,reject)
   {
      fs.readFile(fileName, 'utf8', function read(err, contents) {
      if(err)
            reject(err)
      else
            resolve(contents)
   });
   }
}

async function read()
{
   var file = await readMyFile(fileName);
   console.log(file);
}

Здесь ожидают удержания строки, пока файловая переменная не получит свое значение

  • ожидание работает только с обещанием
  • ожидание может использоваться тольковнутри асинхронных функций
0 голосов
/ 08 мая 2019

Обратный вызов

Обратный вызов - это функция, которая передается в качестве аргумента другой функции и выполняется в конце. Как это:

function(callback){

   //you do some tasks here that takes time

   callback();
}

Обратный вызов - это метод для работы с асинхронным кодом. Например, вам может потребоваться прочитать данные из файла в приложении вашего узла, и этот процесс занимает много времени. Таким образом, вместо того, чтобы блокировать ваш код во время чтения, nodejs выполняет другие задачи и затем возвращается обратно после выполнения обратного вызова.

Promise

Обещание также состоит в том, чтобы иметь дело с асинхронным кодом, как метод обратного вызова, но с более читабельным способом Например, вместо этого:

example(function(){
    return example1(function(){
        return example2(function(){
            return example3(function(){
                done()
            })
        })
    })
})

Это делает его более читабельным, как это:

example()
    .then(example1)
    .then(example2)
    .then(example3)
    .then(done)

Асинхронная функция / Ожидание

Асинхронная функция используется для написания асинхронного кода, в частности, обещаний. внутри этой функции ключевое слово await используется для приостановки выполнения обещания до его разрешения. Другими словами, он ожидает разрешения, а затем возобновляет асинхронную функцию. Например:

async function example(){
    var data = await getData() // it waits until the promise is resolved
    return data;
}
...