我正在摆脱阻塞的无限 while 循环并用 Promise 代替它。我有一个简单的运行函数,它会点亮一个 LED,然后将其关闭,然后继续下一个。
显然 Promise 在 while 循环中不起作用,所以我想知道如何使用递归返回到我的 run()
函数并增加我的计数器 x
?
var x = 0
var sign = 1
function run() {
return new Promise((resolve, reject) => {
try {
wait(20).then(() => { device.setColor("random", { 'channel': 0, 'index': x }) })
wait(20).then(() => { device.setColor("#000000", { 'channel': 0, 'index': x }) })
x += sign
if (x == LED_COUNT - 1) {
sign = -1
} else if (x == 0) {
sign = 1
}
return resolve()
} catch (e) {
return reject(e)
}
})
}
run() // this only runs once, I need it to run forever
最佳答案
递归调用:
将 .then(run())
添加到您的 promise 末尾。
不确定你的等待是如何工作的,我使用 setTimeout 将每个循环延迟 1 秒。下面的例子:
var x = 0
var sign = 1
function run() {
return new Promise((resolve, reject) => {
try {
//example only
console.log('x-->' + x);
//wait(20).then(() => { device.setColor("random", { 'channel': 0, 'index': x }) })
//wait(20).then(() => { device.setColor("#000000", { 'channel': 0, 'index': x }) })
x += sign
if (x == LED_COUNT - 1) {
sign = -1
} else if (x == 0) {
sign = 1
}
return resolve()
} catch (e) {
return reject(e)
}
}).then(setTimeout(function(){ run() }, 1000));
}
run();
关于javascript - 在 NodeJS 中使用 Promise 递归创建无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940066/