nodejs, выполняющий две функции параллельно - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно запустить две задачи параллельно в Node JS, как мы создали два потока в Java.Я просмотрел всю документацию, связанную с обещанием и асинхронностью / ожиданием.

Я просмотрел следующие потоки

Параллельные вызовы функций в Node.js Параллельные операции сPromise.all?

Даже если я буду использовать promise.all, код будет выполняться последовательно.

Но я не смог найти способ сделать это.Я вижу, что http.get выполняется в фоновом режиме и, как только результаты доступны, возвращает ответ в обратном вызове.Пока это не произойдет, я могу выполнять другие задачи.Могу ли я сделать что-то подобное для достижения параллелизма в моем собственном коде.

У меня есть следующий код.Я хочу убедиться, что func1 и fucn2 работают параллельно

Я ожидаю вывод в следующем порядке

calling func1
calling func2
called all functions
promise 1 done!
promise 2 done!

Это мой код

function func1() {

  let promise = new Promise((resolve, reject) => {
    try {
    for(var q=0;q<10000;q++) {
        console.log(q);
    }
    resolve("promise 1 done!")
    } catch(e) {
    reject(e);
    }
  });
  return promise;
}

function func2() {

  let promise = new Promise((resolve, reject) => {
    try {
    for(var r=0;r<10000;r++) {
        console.log(r);
    }
    resolve("promise 2 done!")
    } catch(e) {
    reject(e);
    }
  });
  return promise;
}


function func() {
    console.log("calling func1");
    var promise1 = func1();

    console.log("calling func2");
    var promise1 = func2();

    console.log("called all functions");
    //do some other task

    promise1
.then(result => { console.log("Promise 1 : "+result); })
.catch(error => { console.log("Promise 1 err : "+error ); });

    promise2
.then(result => { console.log("Promise 2 : "+result); })
.catch(error => { console.log("Promise 2 err : "+error ); });
}

func();

ВКоротко, как я могу заставить два цикла for выполняться параллельно.

Возможно ли это в Node JS.Я что-то упустил?

  • Альби Моркен

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Проверьте async.parallel.По сути, вы бы написали:

async.parallel( [

    function ( callback ) {
        // Code
    },

    function ( callback ) {
        // Code
    }

], function ( error, results ) {
    // Both done
} );
0 голосов
/ 06 июня 2018

Вы можете использовать Promise.all.Пример:

var promise1 = func1();
var promise2 = func2();

Promise.all([promise1, promise2])
  .then(results => console.log(results)); // [promise1Result, promise2Result]

Если вы хотите, чтобы обещания разрешались одно за другим, вы можете сделать:

func1().then(result1 => {
  // do something with the result
  return func2();
})
.then(result2 => {
  // do something with the result
})
.catch(err => console.log(err));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...