[英]How can I use async/await in 'new Promise' block to fetch data from an api?
[英]How can I use await fetch() in a promis so that it doesn't violate the eslint rule no-async-promise-executor?
我的代碼違反了eslint規則no-async-promise-executor,但是我不確定如何重構它,以便它在new Promise(async (resolve, reject) => {});
中沒有async
new Promise(async (resolve, reject) => {});
。 我的代碼充滿了這些,並且我猜想它會導致錯誤被bot捕獲,因此我可以使用一些幫助來了解如何更好地解決此問題。
這是一個示例函數:
updateUser = () => {
return new Promise(async (resolve, reject) => {
try {
const url = "/getUser";
const response = await fetch(url);
if (response.ok) {
const user = await response.json();
//
// Do something with user object...
//
} else {
console.log("response", response);
window.location = "/admin";
}
resolve();
} catch (error) {
console.log("error: ", error);
reject(error);
}
});
};
async
函數總是返回promise。
通過將匿名async
函數包裝在new Promise(...)
您將創建一個Promise,它僅且始終采用異步函數返回的promise。
只需擺脫包裝器,將您的resolve
調用替換為return
,將您的reject
替換為throw
。
updateUser = async () => {
try {
const url = "/getUser";
const response = await fetch(url);
if (response.ok) {
const user = await response.json();
//
// Do something with user object...
//
} else {
console.log("response", response);
window.location = "/admin";
}
} catch (error) {
console.log("error: ", error);
throw error;
}
};
當您將該函數標記為異步時,它將自動將返回值包裝在promise中,無論您從函數返回什么...它將被傳遞給.then(),而在異步函數中引發的任何東西都將傳遞給您錯誤處理程序,例如.catch()
這是您可以做什么的示例。
const updateUser = async () => {
const url = "/getUser";
let response;
try {
response = await fetch(url);
} catch (error) {
throw new Error(error);
}
return response;
}
您還可以引用顯式的全局promise,以在異步函數中返回或拒絕值。
const updateUser = async () => {
const url = "/getUser";
let response;
try {
response = await fetch(url);
} catch (error) {
Promise.reject(error);
}
return Promise.resolve(response);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.