【问题标题】:Why I always get a Promise form my return value?为什么我总是从我的返回值中得到一个 Promise?
【发布时间】:2018-07-16 02:50:15
【问题描述】:

下面是我的功能

async function test() {
const data= [];
for (let i = 0; i <= 5; i = i + 1) {
    const payload: any = await postExampleApi(i);
        data.push(payload);
    }
    return data;
}

export const getData =  test().then((data) => {
    console.log(data);
    return data;
});

我尝试使用不同的参数(数字 0 - 5)每次调用 api 六次。

我可以从 console.log 获取我的数据数组,但是,当我从另一个文件导入这个 getData 函数时,我总是得到一个 Promise{...} 而不是数据数组。

我是不是做错了什么?

【问题讨论】:

  • 你为什么认为你不应该得到承诺?
  • 因为 async on function 保证函数返回 Promise - 它在 documentation 中 - 哦,是的,当涉及异步代码时你不能返回同步值 - Promise 不要让异步代码同步
  • 请显示导入getData()并调用它的代码。
  • 好像你想把函数结果data保存到getData。到目前为止,还没有简单的方法可以从异步函数的结果中导出。您想要的是导出test 函数,然后在需要数据时导入并调用await test() 之类的函数。
  • @JaromandaX 我们实际上可以使用一些讨厌的 while 循环返回一个同步值。

标签: javascript reactjs


【解决方案1】:

只要你这样做:

let x = promise().then(cb)

你只得到“x”作为承诺。你应该做的就是当需要这个文件时,做一个“点然后”来获取数据。

因此,无论您需要该文件,请执行以下操作:

let test = require('./test');
test.then((dataArray) => console.log(data));

【讨论】:

  • 请花点时间为反对票发表评论。
【解决方案2】:

因为你正在调用一个异步函数getData === async test(),如果你不想处理then,你可以像await getData()这样调用

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2020-05-02
    • 2012-01-12
    相关资源
    最近更新 更多