【问题标题】:Wait for promise to resolve and do something else while it does等待promise解决并在它执行时做其他事情
【发布时间】:2018-11-19 02:31:07
【问题描述】:

我有一个函数,它做两件事需要 I/O 时间,我想第二次返回它,但我希望在这段时间内处理另一件事并快速发送,即使第一件事还没有完成

getuser(x){
    let username = getUsernameDB(x.id);//takes time to get data it is an async function

    sendMessage(x.id,() => {//send message with callback function when it is recived
       sendMessage(username);//must wait for getUsernameFromDatabase
    });

}

async getUsernameDB(id){
return await this.dataaccess.getUsernameByUserId(id);//this returns new Promise
}

所以我主要想做出一个承诺,执行其他代码然后在这里等待这个承诺解决然后继续。

【问题讨论】:

  • Wait for promise to resolve and do something else while it does - 是的,promise 就是这样运作的……the thread.join trick 现在呢?
  • let username = getUsernameDB(x.id);//takes time to get data it is an async function ... 所以您想等待getUsernameDB(x.id) 完成,然后再将任何内容分配给username .. 对吗?你怎么知道什么时候 getUsernameDB 完成了?它会返回一个 Promise 吗?需要回调吗?那是什么功能?你写的东西?问题中没有足够的信息来成功帮助您
  • 问题已编辑抱歉缺少功能。我想要的是在这里告诉承诺已解决并且用户名有一个值
  • let username = await getUsernameDB(x.id),这将满足您的需求。
  • 实际上只会抛出语法错误。

标签: javascript node.js ecmascript-6 promise es6-promise


【解决方案1】:

.then 应该放在第一个 sendmessage 调用之后。这将使 promise 函数与 sendmessage 并行运行,然后在发送第二条消息之前等待解决

getuser(x){
    let username = getUsernameDB(x.id);//takes time to get data it is an async function

    sendMessage(x.id,() => {//send message with callback function when it is recived
        username.then((usernameVar) => {
            sendMessage(usernameVar);//usernameVar is carring the value now
    })

    });

}

async getUsernameDB(id){
return await this.dataaccess.getUsernameByUserId(id);//this returns new Promise
}

【讨论】:

  • 如果getUsernamesendMessage 之前完成,此案例将失败。例如,如果 getUsername 需要 0.1 秒才能完成,而 sendMessage 需要 0.2 秒才能完成。
猜你喜欢
  • 2021-03-30
相关资源
最近更新 更多