การทำ callback หลังจบลูป by

30
Apr
0

ในการใช้งานของ node.js นั้น จะมีพื้นฐานการทำงานแบบ Asynchronous ทำให้บางครั้ง

การที่เราต้องการค่าตัวสุดท้ายที่ออกมาจากลูป นั้นทำได้ยากมาก

ตัวอย่างเช่น

เรามี array อยู่ 1 ชุดจากนั้นเราต้องการ เอาค่าต่างๆใน  array ชุดนั้นมาเข้าฟังก์ชั่นที่ต้องรอ callback อีกทีหนึ่ง

แล้วเราก็ต้อง callback ค่าที่ได้นั้นๆออกมาเป็น array อีกที เราจะมีวิธีเขียนเพื่อทำงานในลักษณะนี้ยังไง

วิธีแก้ไขปัญหานี้ เราจะใช้ parallel ของ async lib เข้ามาช่วยโดยโครงสร้างของมันมีดังนี้
parallel(tasks, [callback])
async.parallel([
function(callback){
setTimeout(function(){
callback(null, 'one');
}, 200);
},
function(callback){
setTimeout(function(){
callback(null, 'two');
}, 100);
}
],
// optional callback
function(err, results){
// results จะมีค่าเป็น array [one,two]
});

จากตัวอย่างการเขียนเราสามารถเขียน เป็น Array ของ function ให้เสร็จก่อนแล้วค่อยเรียกใช้งาน parallel ได้ แต่สิ่งที่เราต้องการนั้น
เราต้องเอาค่าใน array ไปเรียกใช้ function ก่อนด้วย จะมีลักษณะ การใช้ดังนี้
var aData = [1,2,3];
var aFunc = [];
for (var i in a)
{
//สั่งให้ มันรันคำสั่งนี้ทันที
(function(){
var temp = a[i];
var func = function(callback){
// เรียกฟังก์ชัน อืนเพื่อประมวนผลก่อน
funcA (temp, function(result){
callback(null,result);
}
};
aFunc.push(func);//เก็บ function ลง array
})();
}
async.parallel(aFunc,function(err,results){
//จะได้เป็น array ของข้อมูลที่ออกมาจากฟังก์ชั้น funcA});

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post