Bisakah Anda menggunakan async menunggu di dalam fungsi async.series?
Saya melakukan beberapa eksperimen sederhana, tetapi tidak bekerja seperti yang diharapkan.
Ya kamu bisa! Tetapi alih-alih menggunakan panggilan balik, cukup kembalikan nilai atau lempar kesalahan. http://caolan.github.io/async/global.html
Ok - tolong maafkan saya Jika saya salah mengerti sesuatu Seperti ini?
const result = await async.each(openFiles, async (file) => {
try: {
await asyncOperation(file);
return null
} catch(err) {
return err
}
})
Karena fungsi async
secara otomatis mengubah kesalahan menjadi penolakan, kecuali jika Anda ingin melakukan sesuatu yang khusus dengan kesalahan tersebut, contoh Anda dapat dikurangi menjadi:
const result = await async.each(openFiles, async (file) => {
await asyncOperation(file);
})
Terima kasih atas cuplikan yang ditingkatkan. Tampaknya berfungsi dalam skenario sederhana, tetapi dalam pengaturan berikut saya tidak dapat membuatnya berfungsi:
for (const tasks of fileTasks) {
const result = await async.each(tasks, async (file) => {
await asyncOperation(file);
})
}
Saya memahami bahwa for-of loop akan memungkinkan operasi asinkron?
Karena async.each
tidak mengembalikan Janji, Anda tidak dapat await
itu.
Ahh ok. Jadi menggunakan opsi for-of async/await bukanlah pola yang baik dengan async. Apakah Anda sekarang jika ini ada di peta jalan untuk async?
Ada beberapa ilmu gila yang direncanakan. 😉
Atau util.promisify()
(atau pify()
)
Mengapa ini berubah dari pertanyaan tentang async.series
menjadi async.each
?
const _async = require('async');
const _ = require('lodash');
public doSomething = async(num) : Promise<any> => {
return num*num + 1;
}
public async getResults() {
let results = new Array<any>();
let tasks = [];
try {
const list = [1,2,3,4,5,6,7,8,9,10];
list.forEach((item) => {
tasks.push((callback) => {
this.doSomething(item.then(
(res) => {
results.push(res);
callback(null, res);
}
);
})
})
results = await new Promise((resolve) => {
_async.series(tasks, (err, res) => {
console.log(res);
if (err) {
results.push(err);
}
resolve(results);
})
});
} catch (err) {
results.push(err.message);
console.log(err);
}
return _.join(results, '\r\n');
}
@aearly Hai fen, bisakah Anda memberi tahu saya versi ekstrak mana yang mendukung async/menunggu?
Saya menggunakan caolan/async versi 2.6.0
Komentar yang paling membantu
Ada beberapa ilmu gila yang direncanakan. 😉