'await' 对此表达式的类型没有影响

新手上路,请多包涵

我对此进行了搜索,但没有找到任何特定于我需要的内容。如果有,请在这里分享。

我正在尝试创建一个在各种组件中调用的通用服务。由于它是一个从外部源请求数据的函数,因此我需要将其视为异步函数。问题是,编辑器返回消息“’await’ 对该表达式的类型没有影响”。由于还没有数据,应用程序确实崩溃了。

People.js 调用服务 requests.js

 import React, { useEffect, useState } from "react";
import requests from "../services/requests";

export default () => {

   // State
   const [ people, setPeople ] = useState({ count: null, next: null, previous: null, results: [] });

   // Tarefas iniciais
   useEffect(() => {
       carregarpeople(1);
   }, []);

   // Carregando os dados da API
   const carregarpeople = async (pageIndex) => {
       const peopleResponse = await requests("people", pageIndex);

       // This line below needs to be executed but it crashes the app since I need to populate it with the data from the function requests
       // setPeople(peopleResponse);
   }

   return (
       <div>
       {
           people.results.length > 0 ? (
               <ul>
                   {
                       people.results.map(person => <li key = { person.name }>{ person.name }</li>)
                   }
               </ul>
           ) : <div>Loading...</div>
       }
       </div>
   )
  }

这是 requests.js,它从 API 返回 json

 export default (type, id) => {
console.table([ type, id ]);

fetch(`https://swapi.co/api/${type}/?page=${id}`)

.then(response => response.json())
.then(json => {
    console.log(json);
    return json;
})}

在此处输入图像描述

原文由 Raphael Alvarenga 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.7k
2 个回答

await 仅当您将其与承诺一起使用时才有用,但 requests 不返回承诺。它根本没有返回语句,因此它隐式返回 undefined

看起来你的意思是让它返回一个承诺,所以这是你的代码,其中添加了返回:

 export default (type, id) => {
  console.table([ type, id ]);
  return fetch(`https://swapi.co/api/${type}/?page=${id}`)
    .then(response => response.json())
    .then(json => {
      console.log(json);
      return json;
    })
}

ps,如果您更喜欢使用 async / await 来执行此操作,它看起来像:

 export default async (type, id) => {
  console.table([ type, id ]);
  const response = await fetch(`https://swapi.co/api/${type}/?page=${id}`);
  const json = await response.json();
  console.log(json);
  return json;
}

原文由 Nicholas Tower 发布,翻译遵循 CC BY-SA 4.0 许可协议

我收到此错误只是因为我的 JSDoc 注释不正确。

例如,我有一个 async 函数 @returns {string}

   /**
   * Fetch from the swapi API
   *
   * @param {string} type
   * @param {string} id
   * @returns {string} JSON
   */
  export default async (type, id) => {
    console.table([ type, id ]);
    const response = await fetch(`https://swapi.co/api/${type}/?page=${id}`);
    const json = await response.json();
    console.log(json);
    return json;
  }

我收到“’await’ 对此表达式的类型没有影响”警告 - 但函数看起来是正确的。

但是,一旦我将 JSDoc 更改为 @returns {Promise<string>} 错误就消失了:

   /**
   * Fetch from the swapi API
   *
   * @param {string} type
   * @param {string} id
   * @returns {Promise<string>} JSON
   */

您还可以使用 @async 提示作为 JSDoc 文档 的建议:

 /**
 * Download data from the specified URL.
 *
 * @async
 * @function downloadData
 * @param {string} url - The URL to download from.
 * @return {Promise<string>} The data from the URL.
 */

原文由 icc97 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏