Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:在对象中循环通过承诺_Javascript - Fatal编程技术网

Javascript:在对象中循环通过承诺

Javascript:在对象中循环通过承诺,javascript,Javascript,因此,目前我正在尝试通过一个返回循环(API说它返回一个有承诺的对象) API: 到目前为止,我的代码是: var rbx = require('roblox-js'); rbx.login('INF_BOT', '$$$') .then(function (info) { console.log('Logged in with ID ' + info.userId) }) .catch(function (err) { co

因此,目前我正在尝试通过一个返回循环(API说它返回一个有承诺的对象)

API:

到目前为止,我的代码是:

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()下的意思。

问题是在登录操作的承诺实现之前,您尝试调用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()是否返回一个更可能的承诺,然后以与login()相同的方式调用它

循环必须放在.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()返回一个承诺

#TypeError:Object#没有“then”方法是的,这不应该是可执行的。这是关于如何构造代码以使用返回的承诺的问题的答案。我不知道这个API是否真的返回了承诺。如果它没有。那么()这不是承诺,OP的问题是基于错误的假设。看起来roblox文档建议不返回承诺,而是返回对象{promise:,getStatus:}