【发布时间】:2015-10-22 01:34:52
【问题描述】:
我要实现async.race功能
/*
* Takes array of functions and returns a handler-function of result of the fastest btw arguments
*/
async.race([slower, faster])(function(err, winner) {
console.log(winner); // I'm faster
});
function slower(callback) {
setTimeout(callback.bind(null, null, "I'm slower"), 1000);
}
function faster(callback) {
setTimeout(callback.bind(null, null, "I'm faster"), 10);
}
这里的问题是async.race([slower, faster]) 返回的函数应该能够处理结果。但是它在我们没有得到任何结果的那一刻返回函数。
这是我的代码。问题是如何在最后一行
var async = {
race: function() {
var args = Array.prototype.slice.call(arguments),
finished = false,
i, winner_err, winner_data;
var callback = function(err, data) {
if (finished) return;
else finished = true;
winner_err = err;
winner_data = data;
}
for (i = 0; i < args.length; i++) {
args[i](function(err, data) {
if (finished) return;
else finished = true;
});
}
return function(fn) {
if (finished) {
fn(winner_err, winner_data);
} else {
//QUESTION: how to be here. I need return function with not ready `winner_data` and check in while/setInterval when the results will appear?
}
}
}
}
【问题讨论】:
标签: javascript node.js asynchronous callback