Versi async apa yang Anda gunakan?
2.5.0
Di lingkungan mana masalah terjadi (Versi node/versi browser)
simpul 8
Apa yang kamu lakukan?
async=require('async')
async function myFirstFunction(callback) {
callback(null, 'one', 'two');
}
function mySecondFunction(arg1, arg2, callback) {
// arg1 now equals 'one' and arg2 now equals 'two'
callback(null, 'three');
}
async function myLastFunction(arg1, callback) {
// arg1 now equals 'three'
callback(null, 'done');
}
async.waterfall([
myFirstFunction,
mySecondFunction,
myLastFunction,
], function (err, result) {
// result now equals 'done'
console.log(err, result)
});
Apa yang Anda harapkan terjadi?
untuk tidak memiliki pengecualian
Apa hasil sebenarnya?
> TypeError: callback is not a function
at myFirstFunction (repl:2:5)
at /Users/scott/node_modules/async/dist/async.js:143:27
at /Users/scott/node_modules/async/dist/async.js:21:12
at nextTask (/Users/scott/node_modules/async/dist/async.js:5297:14)
at Object.waterfall (/Users/scott/node_modules/async/dist/async.js:5307:5)
at repl:1:7
at ContextifyScript.Script.runInThisContext (vm.js:44:33)
at REPLServer.defaultEval (repl.js:239:29)
at bound (domain.js:301:14)
at REPLServer.runBound [as eval] (domain.js:314:12) undefined
Callback tidak diteruskan ke fungsi async
, sebagai gantinya, cukup kembalikan nilai.
Dalam kasus fungsi pertama di atas, di mana lebih dari satu argumen diteruskan ke callback
di myFirstFunction
, haruskah kita mengembalikan array?
Ya, Anda bisa melakukan sesuatu seperti:
async.waterfall([
// ...
async function (arg1, arg2) {
//...
const arg3 = await foo()
return [arg1, arg2, arg3]
},
function ([arg1, arg2, arg3], callback) {
//...
}
Lalu bagaimana cara mengembalikan kesalahan? Hanya menggunakan lemparan?
Adakah jawaban dari pertanyaan di atas? Saya percaya untuk menyelamatkan ketika menemukan kesalahan dalam fungsi async, Anda masih perlu memanggil panggilan balik "berikutnya"
Bagaimana dengan ini?
async.waterfall([
// ...
async function (arg1, arg2, callback) {
//...
try {
const arg3 = await foo()
return [arg1, arg2, arg3]
} catch (err) {
callback('An error occured:' + err.message);
}
},
function ([arg1, arg2, arg3], callback) {
//...
}
Fungsi async
tidak mendapatkan panggilan balik yang diteruskan. Hanya throw
kesalahan.
Terima kasih.
Komentar yang paling membantu
Ya, Anda bisa melakukan sesuatu seperti: