在方法对象上循环Pomise

时间:2018-07-26 12:14:04

标签: javascript node.js promise

我有一个带有Flash方法的Router(Liste_routeur_wifi)对象列表,该对象启动新图像的刷新,并在完成后返回一个Promise。 我正在通过Wifi连接到路由器,所以只能一一完成。

我为您提供了列表中2个路由器(索引0和1)的一个(有效的)示例,但是我想将其用于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);

                              })

                          }
            });

2 个答案:

答案 0 :(得分:4)

递归如何?

也许不是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;
                }
            })

        }
    });
}

答案 1 :(得分:2)

您有2个选择。

如果您可以并行执行,则可以使用Promise.all

提供您想要的步骤:

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