Async: كيفية جعل عدم التزامن يعمل مع عدم التزامن / انتظار

تم إنشاؤها على ١٤ فبراير ٢٠١٩  ·  10تعليقات  ·  مصدر: caolan/async

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
question

التعليق الأكثر فائدة

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!
})

ال 10 كومينتر

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات