javascript - 在 NodeJS 中使用 Promise 递归创建无限循环

标签 javascript node.js recursion

我正在摆脱阻塞的无限 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/

相关文章:

node.js - 发送到当前已关闭的 NodeRed 输出 Node 的数据会发生什么情况?

javascript - 递归过滤具有不同属性的对象数组

javascript - 是否可以通过 PHP 或 JS 使用表单操作 PDF?

javascript - 自定义警报/确认框

javascript - 图像未在 IE 8 中显示

node.js - 如何删除 Electron 和 React 中的 "window.api.receive"

javascript - 使用 Handlebars 助手/for 循环在每个标签中写入一次标题

javascript - 如何使用 Protractor 从表格中获取特定单元格值

list - OCaml - 向该列表添加一个包含元组列表的新元组

c - 如何创建对数字求和的递归函数?