我最近将 jsdocs 添加到我的项目中,从那时起我有 eslint 告诉我 'await 对这种表达没有影响'
const result = await someAsyncFunction(); // await has no effect
console.log(result.property);
删除await关键字会导致控制台在结果解析之前尝试记录。
我知道 eslint 会抱怨,因为
someAsncyFunction
本身不返回承诺,但内部有异步函数。
async function someAsyncFunction(){
const response = await fetch('dataset');
const anotherResponse = await fetch('anotherDataset')
const merged = combineDatasets(response, anotherResponse)
return merged;
}
我真的应该把这个函数包装在另一个 Promise 中吗?
async function someAsyncFunction(){
return new Promise(async(resolve) => {
...
resolve(merged);
})
}
忽略有关“等待无效”的警告每次都不会出现问题。它如何让我认为我的方法和/或我对承诺的理解是方式。
也许你可以在这里为我指出正确的方向。
我认为这种方式使用fetch函数是不对的,因为它无论如何都是一个异步函数,更合适的使用方式是:
const result = await someAsyncFunction();
console.log(result.property);
let response;
let anotherResponse;
async function someAsyncFunction(){
fetch('dataset')
.then((res)=>{response=res /*Whatever you want will happen when the
response returns*/})
.catch(()=>{/*Whatever you want to happen in the event of an error
*/})
fetch('anotherDataset')
.then((res)=>{anotherResponse=res /*Whatever you want will happen
when the response returns*/})
.catch(()=>{/*Whatever you want to happen in the event of an error
*/})
const merged = combineDatasets(response, anotherResponse)
return merged;
}
请注意:如果 fetch('') 应返回 json 并且您想在使用它之前从响应中提取它,您可以这样做:
fetch('dataset')
.then((res)=>{return res.json() /*Whatever you want will happen when the response returns*/})
.than((res)=>response=res)/*Because the json() function also returns a promise()... */
.catch(()=>{/*Whatever you want to happen in the event of an error */})