Асинхронизация каждой серии в рамках рекурсивной функции

1

Я пробовал следующий фрагмент кода:

var arrVal = [[1,2],[[2,3],[4,5]],3,4];
var async = require('async');

var recurse = function(arr , callback) {
async.eachSeries(arr, function(eachVal, callback) { 
    if(typeof eachVal == "object") {
        recurse(eachVal);
    }
    else {
        console.log(eachVal);
        callback(null);
    }
}, callback);};

recurse(arrVal);

Ожидается, что все числа присутствуют в массиве arrVal, но я получаю только 1,2 (числа 0-го индекса массива).

Что я делаю неправильно? Может ли кто-нибудь руководствоваться лучшим способом достичь того, что я хочу получить?

ПРИМЕЧАНИЕ. Я надеялся сделать это асинхронно

Теги:
asynchronous
async.js

1 ответ

2
Лучший ответ

Это нормально работает в вашем коде, если в состоянии отсутствия обратного вызова нет. если вы хотите асинхронный способ, вы можете использовать async.each вместо async.eachSeries async.each

Разница с async.eachSeries заключается в том, что каждая итерация будет ожидать завершения операции async до начала следующего.

  var arrVal = [[1,2],[[2,3],[4,5]],3,4];
  var async = require('async');

  var recurse = function(arr , callback) {
  async.eachSeries(arr, function(eachVal, each_cb) { 
  if(typeof eachVal === "object") {
      recurse(eachVal);
      each_cb()
  }
  else {
      console.log(eachVal);

      each_cb(null);
  }
}, callback);};

recurse(arrVal);
  • 0
    Ах, мой плохой! Забыл добавить обратный звонок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню