Async: Bagaimana saya bisa mendorong fungsi secara dinamis dengan argumen berbeda ke array? Saya perlu memproses fungsi-fungsi itu menggunakan Async.js (mode paralel atau balapan)

Dibuat pada 8 Apr 2016  ·  4Komentar  ·  Sumber: caolan/async

Saat ini saya mencoba menjalankan fungsi yang sama secara paralel dengan argumen yang berbeda menggunakan Node.JS

Untuk ini saya menggunakan Async.js dan saya kesulitan mencoba untuk mendorong/menumpuk fungsi ke array.
Masalahnya adalah bahwa fungsi dijalankan dengan argumen yang sama. Inilah yang saya miliki:

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
}

Ada ide?
Terima kasih

question

Komentar yang paling membantu

Banyak hal di sini, termasuk kebiasaan pelingkupan variabel JS dasar. Jawaban singkat untuk pertanyaan Anda adalah Anda dapat menggunakan async.map , ini juga berjalan secara paralel:

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

Tetapi jawaban sebenarnya adalah Anda tidak memerlukan Async sama sekali:

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

Semua 4 komentar

Banyak hal di sini, termasuk kebiasaan pelingkupan variabel JS dasar. Jawaban singkat untuk pertanyaan Anda adalah Anda dapat menggunakan async.map , ini juga berjalan secara paralel:

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

Tetapi jawaban sebenarnya adalah Anda tidak memerlukan Async sama sekali:

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

Terima kasih banyak ...

dikirim dari iPhone saya

Pada 7 April 2016, pukul 19:42, Alex Early [email protected] menulis:

Banyak hal di sini, termasuk kebiasaan pelingkupan variabel JS dasar. Jawaban singkat untuk pertanyaan Anda adalah Anda dapat menggunakan async.map, ini juga berjalan secara paralel:

async.map([1, 2, 3, 4], fungsi(x, panggilan balik){
panggilan balik (null, hitung (x))
}, fungsi(err,hasil){
jika (salah) {
console.log(err);
kembali;
}
console.log("Hasilnya adalah: " + hasil);
});
Tetapi jawaban sebenarnya adalah Anda tidak memerlukan Async sama sekali:

var hasil = [1, 2, 3, 4].map(menghitung)

Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung atau lihat di GitHub

Hai Caolan,
Terima kasih banyak atas bantuannya, itu bekerja dengan sempurna, namun saya ingin tahu bagaimana saya bisa menerapkan mode "balapan".
Saya sudah mencoba beberapa kali dan saya mendapatkan kesalahan.
Saya hanya ingin menjalankan semua fungsi saya secara paralel dan mendapatkan hasil dari siapa pun yang selesai terlebih dahulu.
Adakah ide tentang cara mengimplementasikan Async.race ?
Salam,
Alfredo Borrero
Tanggal: Kam, 7 Apr 2016 18:42:25 -0700
Dari: [email protected]
Ke: [email protected]
CC: [email protected]
Subjek: Re: [caolan/async] Bagaimana saya bisa mendorong fungsi secara dinamis dengan argumen berbeda ke array? Saya perlu memproses fungsi-fungsi tersebut menggunakan Async.js (mode paralel atau balapan) (#1104)

Banyak hal di sini, termasuk kebiasaan pelingkupan variabel JS dasar. Jawaban singkat untuk pertanyaan Anda adalah Anda dapat menggunakan async.map, ini juga berjalan secara paralel:

async.map([1, 2, 3, 4], fungsi(x, panggilan balik){
panggilan balik (null, hitung (x))
}, fungsi(err,hasil){
jika (salah) {
console.log(err);
kembali;
}
console.log("Hasilnya adalah: " + hasil);
});

Tetapi jawaban sebenarnya adalah Anda tidak memerlukan Async sama sekali:

var hasil = [1, 2, 3, 4].map(menghitung)


Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung atau lihat di GitHub

Hai Caolan,

Terima kasih banyak atas bantuannya, itu bekerja dengan sempurna, namun saya ingin tahu bagaimana saya bisa menerapkan mode "balapan". Saya sudah mencoba beberapa kali dan saya mendapatkan kesalahan.
Saya hanya ingin menjalankan semua fungsi saya secara paralel dan mendapatkan hasil dari siapa pun yang selesai terlebih dahulu.
Adakah ide tentang cara mengimplementasikan Async.race ?

Salam,

Apakah halaman ini membantu?
0 / 5 - 0 peringkat