【问题标题】:Promise IF condition always false JavaScript承诺 IF 条件始终为假 JavaScript
【发布时间】:2020-03-10 04:23:18
【问题描述】:

我正在使用 fetch 进行 API 调用。成功进行 API 调用后,我得到了一个很好的状态码,但是当我尝试评估状态码时,我的“if”语句总是转到“else”,即使我的状态码是“200”。请看下面的sn-p:

const fetch = require("node-fetch");
var accessToken = "Bearer <ACCESS TOKEN>";
var url = '<URL>';
var headers3 = {
    'Authorization': accessToken
};

const delAPI = async url => {
    try {
        const response = await fetch(url, {method: "DELETE", headers: headers3});
        const res = await response.status;
        console.log(response.status);
        return res.status;
    } catch (error) {
        console.log(error);
    }
};

delAPI(url).then(
    status => {
        const res = status;
        if (res === 200) {
            console.log("Integration has been deleted");
        } else {
            console.log("Integration is either disabled or not installed");
        }
    });

我认为问题出在条件“(res === 200)”之内,它可能不会将“res”评估为异步函数delAPI中的实际response.status?我已经尝试了无数次迭代来解决这个问题,但到目前为止还没有运气。感谢任何帮助,让我朝着正确的方向前进....

【问题讨论】:

  • console.log(res) 显示什么?
  • 不应该只返回res,而不是response.status,在delAPI定义中?

标签: javascript node.js if-statement promise httpresponse


【解决方案1】:
        const res = await response.status;
    console.log(response.status);
    return res.status;

您的问题是变量 res 中已经有 response.status http 代码,但是您再次返回 res.status,这应该是未定义的。

您只想返回 res 或 response.status。顺便说一句,我认为您不需要等待 response.status。这不是承诺。

顺便说一句,我们可以在这里做一些轻微的重构:

status => {
        if (status === 200) {
            console.log("Integration has been deleted");
        } else {
            console.log("Integration is either disabled or not installed");
        }
    });

【讨论】:

  • 是的....我声明“const res = status;”是什么导致了这些问题。谢谢....对这一切还是陌生的,我正在学习:)
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 2018-05-25
  • 2017-12-19
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
相关资源
最近更新 更多