Javascript 方法对象上的循环Pomise

Javascript 方法对象上的循环Pomise,javascript,node.js,promise,Javascript,Node.js,Promise,我得到了一个路由器列表,上面有一个Flash方法,可以启动新图像的Flash,并在完成后返回一个承诺。 我正在通过Wifi连接路由器,所以只能一个接一个地连接 我给你一个列表索引0和1上的2个路由器的工作示例,但我想为N个路由器做一个,我不知道如何做 如果有人能给我看,那会很有帮助的 wifi.connect({ ssid: Liste_routeur_wifi[0].ssid, password: Liste_routeur_wifi[

我得到了一个路由器列表,上面有一个Flash方法,可以启动新图像的Flash,并在完成后返回一个承诺。 我正在通过Wifi连接路由器,所以只能一个接一个地连接

我给你一个列表索引0和1上的2个路由器的工作示例,但我想为N个路由器做一个,我不知道如何做

如果有人能给我看,那会很有帮助的

wifi.connect({
              ssid: Liste_routeur_wifi[0].ssid,
               password: Liste_routeur_wifi[0].password
            }, async function(err) {
                if (err) {
                   console.log(err);
                } else {        
                     //If im connected
                     console.log('Connexion établie');
                     //flash method return a promise with the flashed router                            Liste_routeur_wifi[0].flash(browser).then(function(routeurflash0) {
                     console.log(routeurflash0);
                     //when the promise is complete, i wouldlike to go to the next router
                         wifi.connect({
                               ssid: Liste_routeur_wifi[1].ssid,
                               password: Liste_routeur_wifi[1].password
                             }, async function(err) {
                             if (err) {
                               console.log(err);
                             } else {
                               console.log('Connexion établie'); Liste_routeur_wifi[1].flash(browser).then(function(routeurflash1) {
                                                console.log(routeurflash1);

                              })

                          }
            });
你有两个选择

如果你能同时做到这一点,你就可以使用Promise.all

如果您希望一个接一个地执行此操作:

return Liste_routeur_wifi.reduce(
    (current, next) =>
      current
        .then(t => next.flash())
        .catch(err => {console.log(err);}),
    Promise.resolve(),
)
你有两个选择

如果你能同时做到这一点,你就可以使用Promise.all

如果您希望一个接一个地执行此操作:

return Liste_routeur_wifi.reduce(
    (current, next) =>
      current
        .then(t => next.flash())
        .catch(err => {console.log(err);}),
    Promise.resolve(),
)
递归呢

也许不是100%符合你的需要,但是

connectWifi(0, routerAmount);

function connectWifi(index, n){
    wifi.connect({
        ssid: Liste_routeur_wifi[index].ssid,
        password: Liste_routeur_wifi[index].password
    }, function(err) {
        if (err) {
            console.log(err);
        } else {
            console.log('Connexion établie');

            Liste_routeur_wifi[index].flash(browser).then(function(routeurflash) {
                console.log(routeurflash);
                if(index <= n){
                    return connectWifi(index++, n);
                } else {
                    return true;
                }
            })

        }
    });
}
递归呢

也许不是100%符合你的需要,但是

connectWifi(0, routerAmount);

function connectWifi(index, n){
    wifi.connect({
        ssid: Liste_routeur_wifi[index].ssid,
        password: Liste_routeur_wifi[index].password
    }, function(err) {
        if (err) {
            console.log(err);
        } else {
            console.log('Connexion établie');

            Liste_routeur_wifi[index].flash(browser).then(function(routeurflash) {
                console.log(routeurflash);
                if(index <= n){
                    return connectWifi(index++, n);
                } else {
                    return true;
                }
            })

        }
    });
}

不要将异步函数作为回调传递。什么是wifi.connect?它不会像.flash那样返回承诺吗?回调不再是异步的了,谢谢你。wifi.connect由节点模块“节点wifi”提供,我不想对其重新编码。flash是我自己编写的一种方法。不要将异步函数作为回调传递。什么是wifi.connect?它不会像.flash那样返回承诺吗?回调不再是异步的了,谢谢你。wifi.connect由节点模块“节点wifi”提供,我不想对其重新编码。flash是我自己写的一种方法。它很有效,谢谢你,我应该考虑一下!它成功了,谢谢你,我应该考虑一下!