Async arrow function expected no return value. 如何解决
时间: 2024-03-31 18:35:44 浏览: 22
这个错误通常是因为在使用异步箭头函数时,返回了一个值而不是一个 Promise 对象。要解决这个问题,可以将返回值包装成 Promise 对象并返回,或者使用普通的函数声明并在内部使用 async/await 来处理异步操作。
例如,以下代码中的异步箭头函数会导致该错误:
```
const fetchData = async () => {
const data = await fetch('https://api.example.com/data');
return data.json();
}
```
要解决此问题,您可以将返回值包装在 Promise 中:
```
const fetchData = async () => {
const data = await fetch('https://api.example.com/data');
return Promise.resolve(data.json());
}
```
或者,您可以使用普通的函数声明:
```
async function fetchData() {
const data = await fetch('https://api.example.com/data');
return data.json();
}
```
相关问题
async await return promise.roslve.then 的执行顺序 讲解
当使用 async/await 语法时,可以使用 await 关键字来等待一个异步操作的结果。在 await 关键字后面,可以写一个返回 Promise 的表达式。执行顺序如下:
1. 当遇到 await 关键字时,它会暂停当前函数的执行,并等待 Promise 对象的解析结果。
2. 在等待期间,JavaScript 可以继续执行其他任务,而不会阻塞线程。
3. 一旦 Promise 对象被解析(即状态从 pending 变为 resolved),await 表达式会返回 Promise 对象的解析值,并且恢复函数的执行。
4. 如果 Promise 对象被拒绝(即状态从 pending 变为 rejected),await 表达式会抛出一个异常,可以使用 try-catch 块进行处理。
在使用 async/await 时,一般会将异步操作包装在 try-catch 块中,以便捕获可能的异常。这样,可以更方便地处理异步操作的结果和错误。
async function confirm() { isShow.value = false; // params.value.pageSize = 7 let i = menu.value.find((v) => v.isActive === true).id - 1; if (i === 0) { params.value.houseType = tagsList.value.find( (v) => v.isActive === true )?.value; } else if (i === 1) { params.value.orientation = tagsList.value.find( (v) => v.isActive === true )?.value; } else if (i === 2) { params.value.rentStr = tagsList.value.find( (v) => v.isActive === true )?.value; } else if (i === 3) { let arr = []; tagsList.value?.forEach((v) => { if (v.isActive === true) { arr.push(v.value * 1); } }); if (arr.length > 0) { params.value.houseLabels = arr.join(","); } } search(); }优化
可以将这段代码优化为:
```
isShow.value = false;
// params.value.pageSize = 7
const i = menu.value.findIndex(v => v.isActive) - 1;
if (i === 0) {
params.value.houseType = tagsList.value.find(v => v.isActive)?.value;
} else if (i === 1) {
params.value.orientation = tagsList.value.find(v => v.isActive)?.value;
} else if (i === 2) {
params.value.rentStr = tagsList.value.find(v => v.isActive)?.value;
} else if (i === 3) {
const arr = tagsList.value?.filter(v => v.isActive)?.map(v => v.value * 1);
if (arr?.length) {
params.value.houseLabels = arr.join(",");
}
}
search();
```
这样可以将代码变得更加简洁和易读,同时也可以避免使用可选链操作符时的一些潜在问题。