Async: كيف يمكنني دفع دوال ذات وسيطات مختلفة ديناميكيًا إلى مصفوفة؟ أحتاج إلى معالجة هذه الوظائف باستخدام Async.js (الوضع المتوازي أو السباق)

تم إنشاؤها على ٨ أبريل ٢٠١٦  ·  4تعليقات  ·  مصدر: caolan/async

أحاول حاليًا تشغيل نفس الوظيفة بالتوازي مع وسيطات مختلفة باستخدام Node.JS

لهذا ، أستخدم Async.js وأنا أعاني في محاولة دفع / تكديس الوظائف إلى مصفوفة.
المشكلة هي أن الوظائف يتم تنفيذها بنفس الوسيطات. هذا ما لدي:

var async = require("async");
var array = [];
var x = [1,2,3,4];

// This portion of code works perfect and the arguments are passed perfectly
// The results that i am getting are: [100, 200, 300, 400]
array.push(function(callback){ callback(null,calculate(x[0]))});
array.push(function(callback){ callback(null,calculate(x[1]))});
array.push(function(callback){ callback(null,calculate(x[2]))});
array.push(function(callback){ callback(null,calculate(x[3]))});

// This portion of code does not work and I dont know why ... 
// The results that i am getting are: [400, 400, 400, 400]
// Obviusly the function is receiving the same argument a=4 everytime is called
for (i=0;i<3;i++){
    array.push(function(callback){ callback(null,calculate(x[i]))});
}

async.parallel(array,function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});


function calculate(a) {
  return a*100
}

اي فكرة؟
شكرا

question

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

الكثير من الأشياء هنا ، بما في ذلك المراوغات الأساسية المتغيرة لـ JS. الإجابة المختصرة على سؤالك هي أنه يمكنك استخدام async.map ، فهي تعمل بالتوازي أيضًا:

async.map([1, 2, 3, 4], function(x, callback){
  callback(null,calculate(x))
}, function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});

لكن الجواب الحقيقي هو أنك لست بحاجة إلى Async على الإطلاق:

var result = [1, 2, 3, 4].map(calculate)

ال 4 كومينتر

الكثير من الأشياء هنا ، بما في ذلك المراوغات الأساسية المتغيرة لـ JS. الإجابة المختصرة على سؤالك هي أنه يمكنك استخدام async.map ، فهي تعمل بالتوازي أيضًا:

async.map([1, 2, 3, 4], function(x, callback){
  callback(null,calculate(x))
}, function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});

لكن الجواب الحقيقي هو أنك لست بحاجة إلى Async على الإطلاق:

var result = [1, 2, 3, 4].map(calculate)

شكرا جزيلا ...

مرسل من الايفون الخاص بي

في 7 أبريل 2016 ، الساعة 7:42 مساءً ، كتب Alex Early [email protected] :

الكثير من الأشياء هنا ، بما في ذلك المراوغات الأساسية المتغيرة لـ JS. الإجابة المختصرة على سؤالك هي أنه يمكنك استخدام خريطة غير متزامنة ، فهي تعمل بالتوازي أيضًا:

خريطة غير متزامنة ([1 ، 2 ، 3 ، 4] ، دالة (x ، رد اتصال) {
رد الاتصال (فارغ ، احسب (x))
} ، وظيفة (يخطئ ، نتيجة) {
إذا (يخطئ) {
console.log (يخطئ) ؛
إرجاع؛
}
console.log ("النتائج هي:" + نتيجة) ؛
}) ؛
لكن الجواب الحقيقي هو أنك لست بحاجة إلى Async على الإطلاق:

نتيجة var = [1، 2، 3، 4] خريطة (حساب)
-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub

مرحبًا Caolan ،
شكرًا جزيلاً على المساعدة ، لقد نجحت بشكل مثالي ، ولكن أود أن أعرف كيف يمكنني تنفيذ وضع "السباق".
لقد حاولت بالفعل عدة مرات وأتلقى أخطاء.
أريد فقط تشغيل جميع أعمالي بالتوازي والحصول على نتيجة من سينتهي أولاً.
أي فكرة عن كيفية تنفيذ Async.race؟
يعتبر،
ألفريدو بوريرو
التاريخ: الخميس ، 7 أبريل 2016 18:42:25 -0700
من: [email protected]
إلى: [email protected]
نسخة إلى: [email protected]
الموضوع: Re: [caolan / async] كيف يمكنني دفع دوال ذات وسيطات مختلفة ديناميكيًا إلى مصفوفة؟ أحتاج إلى معالجة هذه الوظائف باستخدام Async.js (الوضع المتوازي أو السباق) (# 1104)

الكثير من الأشياء هنا ، بما في ذلك المراوغات الأساسية المتغيرة لـ JS. الإجابة المختصرة على سؤالك هي أنه يمكنك استخدام خريطة غير متزامنة ، فهي تعمل بالتوازي أيضًا:

خريطة غير متزامنة ([1 ، 2 ، 3 ، 4] ، دالة (x ، رد اتصال) {
رد الاتصال (فارغ ، احسب (x))
} ، وظيفة (يخطئ ، نتيجة) {
إذا (يخطئ) {
console.log (يخطئ) ؛
إرجاع؛
}
console.log ("النتائج هي:" + نتيجة) ؛
}) ؛

لكن الجواب الحقيقي هو أنك لست بحاجة إلى Async على الإطلاق:

نتيجة var = [1، 2، 3، 4] خريطة (حساب)

-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub

مرحبًا Caolan ،

شكرًا جزيلاً على المساعدة ، لقد نجحت بشكل مثالي ، ولكن أود أن أعرف كيف يمكنني تنفيذ وضع "السباق". لقد حاولت بالفعل عدة مرات وأتلقى أخطاء.
أريد فقط تشغيل جميع أعمالي بالتوازي والحصول على نتيجة من سينتهي أولاً.
أي فكرة عن كيفية تنفيذ Async.race؟

يعتبر،

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