Javascript 如何在继续之前等待graphQL中的查询完成?

Javascript 如何在继续之前等待graphQL中的查询完成?,javascript,reactjs,asynchronous,async-await,graphql,Javascript,Reactjs,Asynchronous,Async Await,Graphql,我在下面有一个代码,在继续执行其余代码之前,我想先完成doSomethingFirst(): async doSomething() { const response = await doSomethingFirst(); // get the response from this first if(response) { // rest of the code } } async doSomethingFirst { const respo

我在下面有一个代码,在继续执行其余代码之前,我想先完成
doSomethingFirst()

async doSomething() {
    const response = await doSomethingFirst(); // get the response from this first

    if(response) {
        // rest of the code
    }

}

async doSomethingFirst {
    const response = await client
        .query({
            query,
            fetchPolicy: "network-only",
            variables: {
                someVariable: value
            }
        })
        .then(response => {
            console.log(response);
        })
        .catch(err => {
            // error
        });
    return await response;    
}

但是,
doSomething()
中的响应返回为
undefined
。此结构有什么问题?

您应该返回响应。不管怎样,你可以这样做:

doSomethingFirst() {
  return client
    .query({
      query,
      fetchPolicy: "network-only",
      variables: {
        someVariable: value
      }
    })
}

async doSomething() {
  try {
    const response = await doSomethingFirst();
    if (response) {
      // rest of the code
    }
  }
  catch (err) {
    console.log(err)
  }
}   
您可能想知道的几件事:

  • doSomethingFirst
    中,您使用的是
    wait
    和链接
    。然后
    您不必这样做,因为它们是相同的
  • 我制作了
    doSomethingFirst
    一个非异步函数,因为
    doSomething
    是一个异步函数,您可以从
    doSomethingFirst
    返回承诺,并在
    doSomething
    内等待响应,也可以像我一样使用try-catch块进行错误处理

  • 试一试,通常对我有效,如果不是的话,也许问题出在别处,它没有返回实际数据

    async doSomethingFirst {
    const response = await client
        .query({
            query,
            fetchPolicy: "network-only",
            variables: {
                someVariable: value
            }
        })
        .then(response => { return response.json();})
        .then(responseData => {console.log(responseData); return responseData;})
        .catch(err => {
            // error
        }); 
    

    }

    这些礼物都在哪里?在教室里?