鉴于以下代码我在与node fileName.js
它似乎运行回路中的所有的项目的命令行运行和然后睡在端部部分JS /节点的代码。 ..就像它都是平行运行或其他东西。试图阻止睡眠中使用的setTimeout
我希望代码在setTimeout
期间阻止/暂停,而不是仅在setTimeout完成后运行该功能。或者,在此用例中,如果setTimeout
不正确,则使用其他方法。
const removeUsers = async() => {
const users = await db.getUsers(); // returns 32 users.
// Split the users up into an array, with 2 users in each 'slot'.
var arrays = [], size = 2;
while (users.length > 0) {
arrays.push(users.splice(0, size));
}
// Now, for each slot, delete the 2 users then pause for 1 sec.
arrays.forEach(a => {
console.log(++counter;);
// Delete 2x users.
a.forEach(async u => {
console.log('Deleting User: ' + u.id);
await 3rdPartyApi.deleteUser({id: u.id});
});
// Now pause for a second.
// Why? 3rd party api has a 2 hits/sec rate throttling.
setTimeout(function() { console.log('Sleeping for 1 sec'); }, 1000);
});
}
和日志是这样的..
1.
Deleting User: 1
Deleting User: 2
2.
Deleting User: 3
Deleting User: 4
3.
...
(sleep for 1 sec)
(sleep for 1 sec)
(sleep for 1 sec)
...
end.
了解如何睡眠不觉得它会阻止..它只是触发关闭,然后获取一个秒后处理的睡眠命令。 ..
这是我真正追求的是...
1.
Deleting User: 1
Deleting User: 2
(sleep for 1 sec)
2.
Deleting User: 3
Deleting User: 4
(sleep for 1 sec).
3.
...
end.
,我想建立对象的请求的数组消耗,然后创建一个next()函数,该函数将pop()作为堆栈,并创建ajax调用和setTimeout自身(next()),或者“呈现”完成的状态。 – dandavis