При использовании сторонней библиотеки, которая не зависит от библиотеки async
, некоторая обработка ошибки в обратном вызове результатов вызывает произвольный обратный вызов внутри одной из параллельных задач.Javascript Async параллельно вызывает несвязанный обратный вызов
например.
var async = require('async'),
bloomjs = require('bloom-js');
var client = new bloomjs.Client({url: "http://localhost:3005/api"});
async.parallel([function (cb) {
console.log('callback1');
client.find('usgov.hhs.npi', '1558490003', function (err, results) {
console.log('callback2');
if (err) return cb(err);
cb(results);
});
}], function (err, results) {
console.log('callback3');
throw "hello";
if(err) return console.dir(err);
console.dir(results);
});
формирует выходной сигнал
callback1
callback2
callback3
callback2
/Users/untoldone/Source/async-demo/node_modules/async/lib/async.js:30
if (called) throw new Error("Callback was already called.");
^
Error: Callback was already called.
at /Users/untoldone/Source/async-demo/node_modules/async/lib/async.js:30:31
at /Users/untoldone/Source/async-demo/node_modules/async/lib/async.js:251:21
at /Users/untoldone/Source/async-demo/node_modules/async/lib/async.js:575:34
at /Users/untoldone/Source/async-demo/demo.js:9:21
at /Users/untoldone/Source/async-demo/node_modules/bloom-js/src/bloom.js:117:18
at IncomingMessage.<anonymous> (/Users/untoldone/Source/async-demo/node_modules/bloom-js/src/bloom.js:219:22)
at IncomingMessage.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
Кажется, что callback2 каким-то образом используются для обработки исключений в callback3. Но данный bloomjs
никогда не использует библиотеку async
, я понятия не имею, как это возможно. Мысли?
Вы вызываете ошибку в обратном вызове 'client.find'. 'bloomjs', вероятно, имеет« catch »вокруг вызова обратного вызова, который вызывает его снова с индикацией ошибки. – Barmar
Это может происходить в одной из двух строк, где вы возвращаете переменную err – RobertoNovelo