【问题标题】:Axios promises confusionAxios 承诺混乱
【发布时间】:2018-05-13 15:53:36
【问题描述】:

我很困惑如何继续获取所有其他信息索引的 Test1 的结果,所以如果 Test1 为真,即使 Test2 和 Test3 为空,它也会根据 Test1 继续打印真

let info = ["Test1", "Test2", "Test3"];

isInfoAviable= (email) => {
    payload.info = info
    return axios.post(url, payload, axiosConfig).then((response) => {
        return response.data.isAvailable ? true : null
    }).catch((error) => {
        console.log(error);
    });
}

for (info of infos) {

    isInfoAviable(info).then((res) => {
        console.log(res) // If Test1 returns true, it'll  true even if Test2 is null, why?
    })
}

【问题讨论】:

    标签: javascript promise axios


    【解决方案1】:

    catchisInfoAviable函数中的错误,所以当你执行isInfoAviable()时,即使isInfoAviable中的promise被拒绝也会解决。

    要解决此问题,请从 isInfoAviable 中删除 catch,并在您调用 isInfoAviable() 时捕获它:

    isInfoAviable(info).then(...).catch(...)
    

    编辑:将payload.info = info 更改为payload.info = email。还要避免使用函数范围之外的变量(例如,payload 应在 isInfoAviable 中声明)。

    【讨论】:

    • 我从 isInfoAvailable 中删除了 catch 并将其放入 for 循环中,就像你说的那样,它仍然给出相同的输出
    • 好吧,也许我不明白你的问题。 “如果 Test1 返回 true,那就是 true”什么是 true?
    • 如果我在 axios.post(() => {}) 中放了一个 console.log(payload.info),那么 payload.info 总是会返回 Test1,而不检查其他的
    • 而且 Test1 是真的,所以如果我将数组重新排序为 ["Test3", "Test1", "Test2"] 它仍然只会打印 Test1
    • 哦,试试payload.info = email。还要尽量避免使用函数范围之外的变量(例如,payload 未在 isInfoAviable 中声明)。
    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 2017-03-07
    • 2022-01-22
    • 2019-10-24
    • 2021-09-07
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多