var async = require('async');
var workPool = async.queue(async (task, taskComplete)=>{
console.log(1, taskComplete);
async.retry(3, async (retryComplete)=>{
console.log(2, retryComplete);
// retryComplete(null, task);
});
});
workPool.push("test");
أتساءل لماذا حصلت على هذه النتيجة:
$ node test.js
1 undefined
2 undefined
https://caolan.github.io/async/
يقبل Async وظائف غير متزامنة أينما نقبل وظيفة رد الاتصال بنمط العقدة. ومع ذلك ، فإننا لا نمرر لهم رد نداء ، وبدلاً من ذلك نستخدم القيمة المعادة ونتعامل مع أي رفض للوعد أو أخطاء تم إلقاؤها.
async.mapLimit(files, async file => { // <- no callback! const text = await util.promisify(fs.readFile)(dir + file, 'utf8') const body = JSON.parse(text) // <- a parse error herre will be caught automatically if (!(await checkValidity(body))) { throw new Error(`${file} has invalid contents`) // <- this error will also be caught } return body // <- return a value! }, (err, contents) => { if (err) throw err console.log(contents) })
نعم ، لا يقوم Async بتمرير عمليات الاسترجاعات إلى وظائف async
- فقط قم بالرجوع عند اكتمال المهمة.
وماذا عن إرجاع القيم من وظيفة رد الاتصال النهائية (بدلاً من تسجيلها بواسطة وحدة التحكم كما في هذا المثال)؟
فقط قيم return
ing من الدالات async
تعمل في معظم الحالات.
أي دالة async
تعرض قيمة بالضبط؟ من ما راجعت أنها ترجع باطلة ، على سبيل المثال
تفعل حتى
pawelotto أعتقد أنه يمكنك استخدام node promisify ، لم
لذلك سيصبح المثال أعلاه (بدون معالجة الخطأ):
import async from "async"
import {promisify} from "util"
const promiseMapLimit = promisify(async.mapLimit)
const results = await promiseMapLimit(files, async file => { // <- no callback!
const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
const body = JSON.parse(text) // <- a parse error herre will be caught automatically
if (!(await checkValidity(body))) {
throw new Error(`${file} has invalid contents`) // <- this error will also be caught
}
return body // <- return a value!
})
ربما يمكنك تجربة neo-async
kazaff رائع ، لم أكن أعرف عنها ، شكرًا!
kazaff أسطورة!
kazaff كيف تستخدم neo-async في إجابة b4dnewz ، فقط تفشل في إرجاع reulst
التعليق الأكثر فائدة
pawelotto أعتقد أنه يمكنك استخدام node promisify ، لم
لذلك سيصبح المثال أعلاه (بدون معالجة الخطأ):