这段代码调用了一个函数(getTable()
),该函数返回一个promise:
function getTables() {
while (mLobby.tblCount() < 4) {
getTable().then(function(response) {
mLobby.addTable(response);
}, function (error) {
console.error("getTable() finished with an error: " + error);
});
}
}
由于异步函数调用的冲突和
while
循环的正常流程,它永远无法解决(最终由于内存满而崩溃)。我尝试通过递归调用将while
更改为if
,但结果相同:function getTables() {
if (mLobby.tblCount() < 4) {
getTable().then(function(response) {
mLobby.addTable(response);
getTables();
}
});
}
最佳答案
以我的经验,在像while
这样的同步 Action 中使用Promises并不会如您所愿。
我所做的是使用async await
完成相同的任务。就像是...
async function getTables() {
while (mLobby.tblCount() < 4) {
await getTable();
// whatever other code you need...
}
}
因此,仅在解决每个
getTable()
调用之后,while循环才能继续按预期工作。显然,一定要测试此代码。这是我正在谈论的一个非常简单的工作示例:https://codepen.io/alexmacarthur/pen/RLwWNo?editors=1011