首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在while循环中对ES6 promise进行逻辑编码

如何在while循环中对ES6 promise进行逻辑编码
EN

Stack Overflow用户
提问于 2017-09-12 21:29:55
回答 2查看 367关注 0票数 2

此代码调用一个函数(getTable()),该函数返回一个promise:

代码语言:javascript
复制
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,但结果相同:

代码语言:javascript
复制
function getTables() {
    if (mLobby.tblCount() < 4) {
        getTable().then(function(response) {
            mLobby.addTable(response);
            getTables();
        }
    });
}
EN

回答 2

Stack Overflow用户

发布于 2017-09-12 21:57:22

根据我的经验,在像while这样的同步操作中使用Promise不会像您希望的那样工作。

我所做的就是使用async await来完成相同的任务。就像..。

代码语言:javascript
复制
 async function getTables() {
     while (mLobby.tblCount() < 4) {
         await getTable();
         // whatever other code you need...
     }
 }

因此,只有在解决了每个getTable()调用之后,while循环才会继续按预期工作。显然,一定要测试这段代码。

下面是我所讨论的一个非常简单的工作示例:https://codepen.io/alexmacarthur/pen/RLwWNo?editors=1011

票数 4
EN

Stack Overflow用户

发布于 2017-09-12 21:50:09

在while循环中执行此操作,并在执行此操作时将结果添加到lobby对象,是否有特殊的原因?也许你可以只使用一个循环的标准调用getTable 4次:

代码语言:javascript
复制
function getTables(limit=4){
  let results = [];
  for(let i=0; i<limit;i++){
    results.push(getTable());
  }
  return Promise.all(results);
}

您的方法将返回一个promise,该promise将与给定的getTable调用的结果数组一起解析

代码语言:javascript
复制
getTables().then(tables => {
  tables.forEach(table => {
   if(myLobby.tableCount() < 4) myLobby.addTable(table)
  })
}).catch(console.warn) 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46177780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档