【问题标题】:Confusion surrounding async and return statements围绕 async 和 return 语句的困惑
【发布时间】:2020-06-15 10:16:07
【问题描述】:

我要做的是向 Web API 发出请求,然后如果输入有效,则从函数返回 true,如果输入无效则返回 false。我希望请求是异步的,但我不希望函数在验证请求之前返回。在发出请求时,我只想继续处理输入。

这里是函数的重要部分:

request({
        url: url,
        json: true
    }, function (error, response, body) {

        if (!error && response.statusCode === 200) {
            console.log(JSON.stringify(body));
            if(body.player !== "null") {
                console.log(body.player.socialMedia.links["DISCORD"]);
                console.log((client.users.get(author).username + "#" + client.users.get(author).discriminator));
                if (body.player.socialMedia.links["DISCORD"] === (client.users.get(author).username + "#" + client.users.get(author).discriminator)) {
                    fs.writeFile(`users/${body.player.uuid}.json`, `{"uuid":"${body.player.uuid}",\n"ign":"${nm}",\n"id":"${author}"}`, {"flag": "w"});
                    successFlag = true;
                }
            }
        }
    });
    console.log(successFlag);
    return successFlag;

如果我使用 async/await,我不确定在获取数据时是否会继续处理输入。

【问题讨论】:

  • 要深入讨论您要做什么,请查看其他答案 stackoverflow.com/questions/14220321/… 我已将此标记为重复,这是一个非常常见的问题,希望您能得到一些从上面的链接讨论清楚。
  • 如果我在返回之前等待请求完成,在处理请求时是否仍会触发事件?

标签: javascript node.js discord.js


【解决方案1】:

return successFlag; 应该在回调中,否则没有得到响应,它将被返回。所以将最后 3 行改为

    console.log(successFlag);
    return successFlag;
});

【讨论】:

  • 那仍然行不通。从回调返回到请求不会使代码同步工作。调用请求的封闭函数仍将退出。
  • 所以封闭函数里面有更多的回报?
  • 您不能直接从异步操作返回。有关更多信息,请参阅问题评论中的链接答案
  • 是的,你可以从异步操作中返回,线程是客户端的,如果响应时间太长就避免它,但是由于我们只是阻塞响应相关的操作,我认为这是正确的方法。
  • @Ender_The_Xenocide 请提供调用请求的用例或完整的虚拟函数。
猜你喜欢
  • 2011-01-30
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多