Async: هل يمكنك استخدام سلسلة غير متزامنة مع عدم التزامن / انتظار؟

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

هل يمكنك استخدام خاصية الانتظار غير المتزامن داخل وظيفة async.series؟

لقد أجريت بعض التجارب البسيطة ، لكنها لم تعمل كما هو متوقع.

docs question

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

هناك بعض العلوم الجنونية المخطط لها. 😉

ال 11 كومينتر

نعم تستطيع! ولكن بدلاً من استخدام رد الاتصال ، ما عليك سوى إرجاع قيمة أو طرح خطأ. http://caolan.github.io/async/global.html

طيب - أرجوك سامحني إذا أسأت فهم شيء 😄 مثل هذا؟

    const result = await async.each(openFiles, async (file) => {
        try: {
            await asyncOperation(file);
            return null
        } catch(err) {
            return err
        }
    })

نظرًا لأن وظائف async تلقائيًا بتحويل الأخطاء إلى حالات رفض ، إلا إذا كنت تريد القيام بشيء خاص مع الخطأ ، يمكن اختصار مثالك إلى:

    const result = await async.each(openFiles, async (file) => {
        await asyncOperation(file);
    })

شكرا لك على المقتطف المحسن. يبدو أنه يعمل في سيناريو بسيط ، لكن في الإعداد التالي لا يمكنني تشغيله:

for (const tasks of fileTasks) {
    const result = await async.each(tasks, async (file) => {
        await asyncOperation(file);
    })
}

كنت على دراية بأن حلقة for-of ستسمح بعمليات غير متزامنة؟

نظرًا لأن async.each لا يُرجع الوعد ، فلا يمكنك await ذلك.

ااه حسنا. لذا فإن استخدام الخيار for-of async / wait ليس نمطًا جيدًا مع عدم التزامن. هل أنت الآن إذا كان هذا على خارطة الطريق لعدم التزامن؟

هناك بعض العلوم الجنونية المخطط لها. 😉

أو util.promisify() 😉

(أو pify() )

لماذا ينتقل هذا من سؤال حول async.series إلى 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 Hey fen هل يمكن أن تخبرني أي إصدار إضافي يدعم غير متزامن / ينتظر؟
أنا أستخدم caolan / غير متزامن الإصدار 2.6.0

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