2015-04-12 4 views
0

В документации Я не могу найти способ обработки ошибки в методе серии async. Как я могу правильно изучить async js, обычно wiki для github является ниже среднего для людей, которые не связаны с ним с точки зрения полезности.Как вы обрабатываете ошибку в asyncjs?

Вот мой код:

function async1(cb,err) { 
    setTimeout(function() { 
     console.log(1); 
     cb(); 
    }, 1000); 
} 

function async2(cb,err) { 
    setTimeout(function() { 
     // console.log(2); 
     throw new Error; 
     cb(); 
    }, 1000); 
} 

function async3(cb,err) { 
    setTimeout(function() { 
     console.log(3); 
     cb(); 
    }, 1000); 
} 

async.series([ 
    async1, 
    async2, 
    async3 
], function (err) { 
    console.log(err); 
}); 

Это просто заканчивается и ошибка броска.

Я несколько вопросов ...

Правильно ли я ошибка обработки, по-видимому, не правильно, так что не так?

Для работы Async функция, используемая в серии, должна иметь первый параметр как обратный вызов?

Если да, значит, вы не можете использовать его в других библиотеках. Потому что они могут не иметь обратного вызова в качестве первого параметра.

+2

Обратные вызовы узлов не выбрасываются в безопасное место, и вы не можете просто перебрасывать исключения таким образом внутри них (например, обещания - это, кстати), вам нужно попробовать/поймать их и вызвать cb с ошибкой 'cb (new Error)' а не бросать его. См. Http://stackoverflow.com/questions/14301839/javascript-asynchronous-exception-handling-with-node-js –

+0

Как я могу сделать с asyncjs –

+3

Это не ошибка async.js. Ошибка находится в setTimeout. Как уже упоминал Бенджамин, вы не можете выбросить ошибку из асинхронных функций. Вместо этого передайте ошибку в качестве аргумента для вашего обратного вызова. – slebetman

ответ

0

две вещи:

первая функция только не принимать Cb параметру нет параметра заблуждается, так что должно быть действительно как function async1(cb){. вместо function(cb,err){. и ...

бросать ошибки вы делаете это

cb(new Error) //as told in comments above.

и не бросать новую ошибку.

Смежные вопросы