我搜索了这个,但我没有找到任何具体的东西,我需要什么。如果有一个,请在这里分享。
我正在尝试创建一个通用服务,以便在各种组件中调用。由于它是一个从外部源请求数据的函数,因此我需要将其视为异步函数。问题是,编辑器返回消息“'await'对该表达式的类型没有影响”。由于还没有数据,应用程序确实崩溃了。
People.js调用服务请求.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;
})}
5条答案
按热度按时间z4iuyo4d1#
我得到这个错误只是因为我的JSDoc注解不正确。
例如,我有一个
async
函数,它包含@returns {string}
:我收到了“'await'对这个表达式的类型没有影响”的警告-但是这个函数看起来是正确的。
然而,一旦我将JSDoc更改为
@returns {Promise<string>}
,错误就消失了:您还可以使用
@async
提示,如JSDoc documentation所建议的那样:eeq64g8w2#
await
只在你使用它的时候才有用,但是requests
并不返回一个promise,它根本没有return语句,所以它隐式地返回undefined
。看起来你想让它返回一个承诺,所以下面是添加了return的代码:
另外,如果您更喜欢使用
async
/await
执行此操作,则如下所示:r6hnlfcb3#
如果您使用typescript得到这个结果,可能是因为您没有返回
Promise
例如:
wwwo4jvm4#
在我的例子中,这个问题纯粹与方法的js-doc相关。
我的方法已经有了async修饰符。
原件:
固定:
ergxz8rk5#
我找到了解决办法。这个建议弹出来是因为你在await关键字后面放了一个错误的对象。你可以通过在await关键字后面放一个promise(不带括号)或者一个返回promise的函数来完全摆脱这个问题。