await 对这种表达没有影响 - 但显然有影响

问题描述 投票:0回答:1

我最近将 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);
  })
}

忽略有关“等待无效”的警告每次都不会出现问题。它如何让我认为我的方法和/或我对承诺的理解是方式。

也许你可以在这里为我指出正确的方向。

javascript async-await promise
1个回答
-1
投票

我认为这种方式使用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 */})
© www.soinside.com 2019 - 2024. All rights reserved.