Versi async apa yang Anda gunakan?
2.6.1
Di lingkungan mana masalah terjadi (Versi node/versi browser)
8.11.3
Apa yang kamu lakukan?
Dengan asumsi fileObj dipasok dari luar:
async.auto({
download: (downloadCB) => {
if (fileObj) {
fs.writeFile(__dirname + ‘fileNew.txt’, fileObj.content, 'base64', function (err) {
if (err){
return downloadCB(err);
}
return downloadCB(null , fileObj.generatedFileName); // works fine
});
} else {
let err = new Error('File not found');
return downloadCB(err);
}
},
collectData: ['download', async (results, collectCB) => {
console.log(typeof collectCB); // prints undefined
console.log(typeof results); // prints correct object
let res = await anHttpRequest();
if (res.response && res.response.statusCode == 200) {
return collectCB(null , 'fileCombined.txt'); // This is where the ISSUE happens
}
else if(res.response.statusCode >= 300) {
return collectCB(new Error('Request failed inside async-auto'));
}
}],
filterData: ['collectData', (results, filterCB) => {
doFilter(results.collectData, filterCB);
}],
})
Apa yang Anda harapkan terjadi?
Setelah eksekusi collectData selesai, filterData harus memulai eksekusi param yang dilewatkan di dalam fungsi collectCB
Apa hasil sebenarnya?
TypeError: collectCB bukan fungsi.
Kode yang sama dijalankan dengan baik dengan versi 2.0.1 tetapi setelah ditingkatkan ke 2.6.1 kode tersebut berhenti berfungsi dan ini penting bagi kami. Setiap pekerjaan di sekitar juga akan dihargai.
Kami memperlakukan fungsi async
berbeda -- kami tidak memberikan mereka panggilan balik. Sebagai gantinya, cukup return
sebuah nilai (atau throw
sebuah kesalahan).
Ya, mempelajari hal yang sama dari StackOverflow dan memposting referensi yang sama di sini, jika seseorang menemukan ini di masa mendatang: Using-async-await-inside-async-auto-chain
Ini juga berlaku untuk async.parallel jika fungsinya async, Anda harus mengembalikan nilai bukan memanggil panggilan balik. Ini harus ditambahkan ke dokumentasi dan contoh.
async.parallel({
// NOTE: for async functions just return value or throw error
// don't use the callback
dates: async function(callback) {
var rr = await getDates(dbName, r.indi, idx);
return rr;
},
sdates: async function(callback) {
var rr = await getDates(dbName, r.spouse, idx);
return rr;
},
cdates: async function(callback) {
var rr = await getDates(dbName, r.cindi, idx);
return rr;
}
},
function(err, results) {
console.log(results);
});
Saya ingin menulis ulang banyak contoh di dokumen untuk menggunakan lebih banyak async/menunggu, untuk menyoroti apa yang dapat Anda lakukan sekarang.
Lebih dari fitur dalam paket ini, kami membutuhkan dokumen. Akan sangat bagus untuk melihat lebih banyak contoh di masa depan
Komentar yang paling membantu
Kami memperlakukan fungsi
async
berbeda -- kami tidak memberikan mereka panggilan balik. Sebagai gantinya, cukupreturn
sebuah nilai (atauthrow
sebuah kesalahan).