Javascript:通过对象内的承诺循环

时间:2017-01-27 00:39:23

标签: javascript

所以目前我正在尝试循环返回(API表示它返回一个在其中有承诺的对象)

API:https://github.com/sentanos/roblox-js/wiki/Main-Functions

我的代码到目前为止:

var rbx = require('roblox-js');

      rbx.login('INF_BOT', '$$$')
      .then(function (info) {
      console.log('Logged in with ID ' + info.userId)
    })
      .catch(function (err) {
      console.error(err.stack);
    });

  var Players = rbx.getPlayers(539310, 1, false, -2)


for (var plr in Players) {
   console.log(plr);
}

我从来没有见过在一个对象中帮助过的承诺,也不知道如何通过承诺来获得返回的玩家。上面链接的API表示我在函数getPlayers()

下的含义

2 个答案:

答案 0 :(得分:0)

问题出在满足登录操作的承诺之前,您尝试调用getPlayers()。目前,尚未对rbx对象进行身份验证。换句话说,承诺在未来的某个时间异步完成,而getPlayers()的调用在login()同步之后发生。因此,要修复代码,您可以在履行承诺时调用getPlayers(),即在then子句中:

var rbx = require('roblox-js');

rbx.login('INF_BOT', '$$$')
  .then(function (info) {
    console.log('Logged in with ID ' + info.userId);
    var Players = rbx.getPlayers(539310, 1, false, -2);
    for (var plr in Players) {
      console.log(plr);
    }
  })
  .catch(function (err) {
    console.error(err.stack);
  });

同样验证getPlayers()返回一个更有可能的promise,然后以与login()相同的方式调用它。

答案 1 :(得分:0)

循环必须放在.then函数中...... 类似这个可能不可执行的例子......例如。否则,您将尝试访问可能尚未存在的数据。

var rbx = require('roblox-js');

  rbx.login('INF_BOT', '$$$')
  .then(function (info) {
      console.log('Logged in with ID ' + info.userId)
      rbx.getPlayers(539310, 1, false, -2).promise.then(function(Players){
          for (var plr in Players) {
           console.log(plr);
          }
      });        
    });
  })
  .catch(function (err) {
  console.error(err.stack);
});

您必须查看API以确定您想要的集合是否传递给.then()。但这是一般模式。根据您的需要,还有很多其他方法可以构建它。

这假设getPlayers()返回一个promise。