【问题标题】:Using Return Value from Async Function In IF Statement在 IF 语句中使用异步函数的返回值
【发布时间】:2020-03-04 20:38:34
【问题描述】:

NodeJS 和 JavaScript 新手

我正在使用 NodeJS 进行 API 调用以在异步函数中返回一些 JSON 数据。目前,API 调用按预期工作,我已经解析了我正在寻找的数据。我遇到的麻烦是使用解析的 json 数据作为 IF 语句中的条件,这样我就可以继续使用其余的脚本预期功能。同时,为了简化,如果 JSON 数据符合我的预期,我将其编写为显示字符串语句:

const fetch = require("node-fetch");
var accessToken = "Bearer <ACCESS TOKEN>";
var url = '<API ENDPOINT>';
var headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': accessToken
};

const getData = async url => {
    try {
        const response = await fetch(url, {method: "Get", headers: headers});
        const json = await response.json();
        console.log(json.status);
        return json.status
    } catch (error) {
        console.log(error);
    }

};

let apiStatus = getData(url);
let activated = "ACTIVATED";
let configured = "CONFIGURED";

if (apiStatus.toString() !== activated) {
    console.log("BLAH");
}

本质上,如果“json.status”的返回值等于“ACTIVATED”,那么我将执行一个动作。否则,我将执行不同的操作。

目前,我无法将“getData()”的输出用于 IF 条件。任何有关后续步骤的帮助将不胜感激。

【问题讨论】:

  • 使用await getData()getData().then(apiStatus =&gt; …

标签: javascript node.js function asynchronous


【解决方案1】:

您需要等待 promise 被解决,因为现在您正在评估一个 Promise(待处理)对象。

你的 getData() 函数没问题。

let apiStatus = await getData(url);

我认为 async 在窗口范围内不起作用,您可以尝试一下。如果这不起作用,那么您只需要等待 promise 被解决。

getData(url).then(
   status => {
      if (status.toString() === 'activated'){
         ...
      }
});

【讨论】:

  • 使用回调 ".then" 成功了!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多