【问题标题】:Vue.js, async await functions return empty resultsVue.js,异步等待函数返回空结果
【发布时间】:2020-12-24 12:57:28
【问题描述】:

js 项目,我需要使用 await/async 从我的 API 获取数据。

我的代码

        const logsFc = async () => {
          let logs = [];
          for (let i = 0; i < this.data.length; i++) {
            const formData = new FormData();

            const getLogsFc = () => {
              getLogs.request(new URLSearchParams(formData), (response) => {
                if (response.status >= 200 && response.status < 300) {
                  localConsoleLog('getLogs', response);
                  return response.data.data;
                }
              });
            };

            let data = await getLogsFc();
            console.warn(data);
            logs.concat(data);
          }

          return logs;
        };

但是在得到响应之前会返回日志。

babel.config.js

module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        useBuiltIns: 'usage',
        corejs: 3.6,
        modules: false,
      },
    ],
  ],
};

"vue": "^2.6.0"

我做错了什么?

【问题讨论】:

  • getLogsFc 没有返回任何内容。您可能想在getLogs.request 之前放置一个return
  • 什么是getLogs.request?它似乎没有返回承诺,所以你不能在这里使用await
  • @Bergi getLogs.requestaxios 请求
  • 在这种情况下,不要传递回调,而是使用它创建的承诺

标签: javascript vue.js webpack babeljs core-js


【解决方案1】:

不要运行request的回调,只返回响应:

 const getLogsFc = async () => {
          let response = await getLogs.request(new URLSearchParams(formData));
            if (response.status >= 200 && response.status < 300) {
                  localConsoleLog('getLogs', response);
                  return response.data.data;
                }
            };

            let data = await getLogsFc();

【讨论】:

  • 你的response 是一个承诺,没有.status 属性
  • 你说得对,我忘了将 async/await 添加到内部函数
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2019-10-20
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2017-07-12
相关资源
最近更新 更多