Javascript:在对象中循环通过承诺
因此,目前我正在尝试通过一个返回循环(API说它返回一个有承诺的对象) API: 到目前为止,我的代码是: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
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:}