Javascript 如何在while循环中对ES6承诺进行逻辑编码
此代码调用一个函数(Javascript 如何在while循环中对ES6承诺进行逻辑编码,javascript,loops,es6-promise,Javascript,Loops,Es6 Promise,此代码调用一个函数(getTable()),该函数返回一个承诺: function getTables() { while (mLobby.tblCount() < 4) { getTable().then(function(response) { mLobby.addTable(response); }, function (error) { console.error("getTable() fin
getTable()
),该函数返回一个承诺:
function getTables() {
while (mLobby.tblCount() < 4) {
getTable().then(function(response) {
mLobby.addTable(response);
}, function (error) {
console.error("getTable() finished with an error: " + error);
});
}
}
在while循环中执行此操作并在执行此操作时将结果添加到lobble对象是否有特定的原因? 也许您可以使用一个标准for循环来调用getTable 4次:
function getTables(limit=4){
let results = [];
for(let i=0; i<limit;i++){
results.push(getTable());
}
return Promise.all(results);
}
函数getTables(limit=4){
让结果=[];
for(设i=0;i{
tables.forEach(table=>{
if(myLobby.tableCount()<4)myLobby.addTable(table)
})
}).catch(控制台。警告)
根据我的经验,在像这样的同步操作中使用承诺,而
不会像你想要的那样工作
我所做的是使用asyncwait
来完成相同的任务
async function getTables() {
while (mLobby.tblCount() < 4) {
await getTable();
// whatever other code you need...
}
}
异步函数getTables(){
while(mLobby.tblCount()<4){
等待可获取();
//你需要的任何其他代码。。。
}
}
因此,while循环只有在每个getTable()
调用都得到解决后才能继续工作
这里有一个非常简单的工作示例来说明我所说的:为什么不调用您的
addTable
函数4次?(不要误读我,在循环中)我简化了这里的问题。循环值之前不知道。你能发布错误日志和getTable实现吗?递归的第二种方法是可行的,应该可以工作,确保mLobby.tlbCount()
返回正确的值。另外,ismLobby.addTable()
同步操作?当递归代码示例不起作用时,这意味着函数mLobby.addTable
本身不同步,或者它没有正确地增加mLobby.tblCount
。我已经结束了。愚蠢的软件甚至不允许我删除这个问题。这个地方让人尽可能地困难我可以问一个问题并得到答案,当我厌倦了这一切并试图删除它以避免为任何人浪费更多的时间时,它不会让我删除它。可笑的地方。没关系,至少你的问题似乎已经解决了。(是的,限制有时很烦人)
getTables().then(tables => {
tables.forEach(table => {
if(myLobby.tableCount() < 4) myLobby.addTable(table)
})
}).catch(console.warn)
async function getTables() {
while (mLobby.tblCount() < 4) {
await getTable();
// whatever other code you need...
}
}