Node.js 处理数组中的项,在NodeJ中的每个项之间有延迟
我有一个需要发送的消息列表,中间有1秒的延迟。 目前我正在使用此功能:Node.js 处理数组中的项,在NodeJ中的每个项之间有延迟,node.js,promise,delay,Node.js,Promise,Delay,我有一个需要发送的消息列表,中间有1秒的延迟。 目前我正在使用此功能: send() { return new Promise((resolve, reject) => { this._send(resolve); }); } _send(resolve, index) { index = index || 0; if (this.messages.length && index < this.messages.len
send() {
return new Promise((resolve, reject) => {
this._send(resolve);
});
}
_send(resolve, index) {
index = index || 0;
if (this.messages.length && index < this.messages.length) {
if (this.messages[index]) {
let response = this.messages[index];
response.send().then(() => {
this._schedule(resolve, index);
});
} else
this._schedule(resolve, index);
}
else
resolve();
}
_schedule(resolve, index) {
setTimeout(() => {
this._send(resolve, ++index);
}, 1000);
}
这是正确的吗?像这样传递
resolve
是混乱和不必要的。并使用排序发送。@Roamer-1888坦克,更新了问题。如果你想利用蓝鸟的糖分方法,那么它是一个使用and的单行程序。
Promise.reduce(
Iterable<any>|Promise<Iterable<any>> input,
function(any accumulator, any item, int index, int length) reducer,
[any initialValue]
) -> Promise
_wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
__send() {
return Promise.reduce(this.messages, function (dummy, response, index, len) {
return response.send().then(() => {
return this._wait(1000);
}).catch(() => {
//don't care about a error , continue to the next one
return this._wait(1000);
});
}).then(() => {
return true;
});
}