我能想到的办法是记录下任务完成所运行的时间,然后和规定的时间比较,如果大于规定的时间,就输出timeout,如果小于规定的时间,就输出结果。
可是好像和题目的要求有点不符,不知道怎么实时监听这个任务,一旦到达了规定的时间,没有得到想要的结果,就输出timeout
我能想到的办法是记录下任务完成所运行的时间,然后和规定的时间比较,如果大于规定的时间,就输出timeout,如果小于规定的时间,就输出结果。
可是好像和题目的要求有点不符,不知道怎么实时监听这个任务,一旦到达了规定的时间,没有得到想要的结果,就输出timeout
我感觉没那么高大上,其实考察的是你的设计思路,把问题分解开,然后再串起来,单拎出每一个点都很简单。
1 超时判定。开一个timer,并记录当前时间,然后所有方法返回时要做一个是否超时判断,不超时清除timer,调用回调;超时的话就静默不用管了。
2 数组转换成方法参数。写个工具方法,很简单。
function fnCall(list) {
return list[0].apply(list.splice(1));
}
3 并行执行方法。这个就很多方法了:promise, async, generator,我写个最简单的计数器思路:
// fns = [fn1, fns, fn3, ...];
function parallel(fns, callback) {
var count = fns.length;
var results = [];
// 闭包 防止结果顺序串了
var closure = function(fn, i) {
fn(function(data) {
count = count - 1;
results[i] = data;
// 全部返回
if (count == 0) {
callback(results);
}
});
};
for (var i = 0; i < fns.length; i++) {
closure(fns[i], i);
}
}
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答893 阅读✓ 已解决
5 回答1.6k 阅读✓ 已解决