هل يمكنك استخدام خاصية الانتظار غير المتزامن داخل وظيفة async.series؟
لقد أجريت بعض التجارب البسيطة ، لكنها لم تعمل كما هو متوقع.
نعم تستطيع! ولكن بدلاً من استخدام رد الاتصال ، ما عليك سوى إرجاع قيمة أو طرح خطأ. 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
التعليق الأكثر فائدة
هناك بعض العلوم الجنونية المخطط لها. 😉