Как заменять callback асинхронной функции из-за promise? Nodejs 6.9.1

Я исследовал на альтернативах, чтобы выполнять серию асинхронных функций одна после другой. Способ, в котором я это делаю сейчас, - как в следующем примере:

function readFiles () {
  file1()
}

function file1 () {
  fs.readFile('file1', 'utf8', function (err,data) {
    if (err) {
      return console.log(err)
    }
    console.log(data)
    file2()
  })
}

function file2 () {
  fs.readFile('file2', 'utf8', function (err,data) {
    if (err) {
      return console.log(err)
    }
    console.log(data)
    file3()
  })
}

function file3 () {
  fs.readFile('file3', 'utf8', function (err,data) {
    if (err) {
      return console.log(err)
    }
    console.log(data)
  })
}

Этот пример - это, чтобы показывать асинхронные функции, которые он может быть любым.

Поскольку он появляется, readFiles() только выполни file1(), который, закончив Ваше асинхронное выполнение, он будет призывать в file2(). Когда file2() закончите выполнять, призови в file3(). И так он мог бы продолжать даже N функции.

То, что я хочу, состоит в том, чтобы снимать эту сильную зависимость делая что-то как это:

function readFiles () {
  file1()
  file2()
  file3()
  fileN()
}

function file1 () {
  fs.readFile('file1', 'utf8', function (err,data) {
    if (err) {
      return console.log(err)
    }
    console.log(data)
    // Ya no invoco nada aqui
  })
}

// Resto de funciones

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

Я вижу, что promises могут служить, но мне не удается понять их o.o

1
задан 20.01.2017, 20:16
0 ответов

С Promises обрежь реализовывать это легким способом. Главным образом tenes, что понимать хорошо различие между Callbacks и Promises. Если pensas на Испанском языке, Promise равен Обещанию. Я думаю, что способ, в котором ты бы это понимал легко,, - если я говорю тебе, что: "File1 - обещание чтения файла file1". Обещание может быть:

  • Серьга того, чтобы быть законченной
  • Выполненная
  • Отрицаемая

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

// Creamos una función que permita leer un archivo con Promesas
function readFile(fileToRead){
  // La función devuelve una promesa
  return new Promise (reject, resolve) {
    // Se procede a leer el archivo
    fs.readFile(fileToRead, 'utf8', function (err, res) {
      // Si hay un error la promesa no se cumple (se rechaza)
      if (err) return reject(err);
      // Si esta todo bien, la promesa se resuelve (se cumple)
      return resolve(res);
    });
  }
}

// Procedemos a leer los archivos
Promise.all([readFile('file1'), readFile('file2'), readFile('file3')]).then(function(data){
    console.log('file 1');
    console.log(data[0]);

    console.log('file 2');
    console.log(data[1]);

    console.log('file 3');
    console.log(data[2]);
}).catch(function(error){
    console.log(error);
});

// Tambien puedo leerlos uno por uno
readFile('file1').then(function (data) {
    console.log(data);
    return readFile('file2');
}).then(function (data) {
    console.log(data);
    return readFile('file3');
}).catch(function (error) {
    console.log(error);
});

Второй способ понятнее, но первое ожидание ответ 3 чтения, чтобы заканчиваться

1
ответ дан 03.12.2019, 17:36

Теги

Похожие вопросы