【发布时间】:2021-07-27 21:05:14
【问题描述】:
我想知道下面的代码是如何工作的(它在下拉列表中显示正确的选项),即使 IntelliJ 中的警告说“忽略从 Promise 返回的 Promise”并建议更改代码。 初始版本代码:
import React, { useState, useEffect } from "react";
import axios from "axios";
const Cake = () => {
const [ing, setIng] = useState([]);
const [error, setError] = useState("");
const getIngredients = async () => {
// returns an array of strings
const url = new URL("someUrl");
const result = await axios.get(url.toString());
return result.data;
};
useEffect(() => {
new Promise((resolve, reject) => {
getIngredients()
.then((response) => setIng(response))
.then((response) => resolve(response))
.catch((error) => setError(error));
});
}, []);
return (
<div>
<Select options={ing} />
</div>
);
};
export default Cake;
IntelliJ 建议在我的 Promise 中添加“then”,如下所示:
useEffect(() => {
new Promise((resolve, reject) => {
getIngredients()
.then((response) => setIng(response))
.then((response) => resolve(response))
.catch((error) => setError(error));
}).then((r) => console.log(r));
}, []);
【问题讨论】:
-
将代码包装在
useEffect挂钩中的承诺的目的是什么?我认为这里的问题是没有必要的 -
在 Promise 构造函数中包装
getIngredients有什么意义?你已经有一个调用getIngredients返回的promise,不需要使用promise构造函数。 -
实际上来自
new Promise的承诺被忽略了 -
查看本文的“创建新的 Promise”部分:runnable.com/blog/…您正在链的顶部创建一个不需要的承诺 - getIngredients() 函数已经返回一个 Promise
-
@JuanMendes
return getIngredients(...)不需要。useEffect挂钩的有效返回值是用作 cleanup 函数的函数。
标签: javascript reactjs promise