这段代码调用了一个函数(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

09-27 01:23