我正在try 执行n个单元的工作,具体地说,我需要通过具有数据包大小上限的连接发送未知大小的array.包发送 routine 异步运行(在 node 库中),所以我想使用Promise.我已经把一切都抽象出来,得出了以下解决方案:
function worker(k, n, final_resolve, final_reject){
return new Promise((resolve, reject) =>
{
console.log("worker("+k+") start");
setTimeout(() => {
if (Math.random() < 0.2)
reject("error");
else {
console.log("worker("+k+") done");
if (k < n)
resolve(worker(k + 1, n, final_resolve, final_reject).catch(final_reject));
else
final_resolve("final");
}
}, 200);
});
}
function asyncwork(n) {
return new Promise((resolve, reject) =>
{
worker(0, n, resolve, reject);
});
};
const aw = asyncwork(5);
aw.then(
(s) => { console.log("resolved " + s); return "resolved" + s; } ) // is this final "return" good for anything?
.catch(
(e) => console.log("Error"));
这有多糟糕/愚蠢/危险?这看起来很管用,但这是我第一周使用JavaScript,而且不止一次,代码在变化的条件下炸飞了我的脸.我仍然对新主题和新技术的广度感到迷茫.你可以自由地批评一切.
我相信有一些常见的方法来处理这种问题,或者是图书馆.