NodeJS异步功能未暂停

马克·泰尔斯

我有一个异步函数,它使用await调用另一个异步函数,但是第一个函数不等待第二个函数完成。

module.exports.checkNewUser = async(uuid) => {
    const getUserQuery = `MATCH (n:USER {uuid:"${uuid}"}) RETURN n;`
    console.log(getUserQuery)
    console.log('1')
    const result = await this.runCypherQuery(getUserQuery)
    console.log('3')
    console.log('results:')
    console.log(JSON.stringify(result, null, indent))
    if(result !== []) throw new Error('user already exists')
    return
}

const request = require('request')
const uri = 'http://localhost:7474/db/data/transaction/commit'

module.exports.runCypherQuery = async(query) => {
    const headers = { Authorization: 'Basic xxx' }
    const json = {statements: [{statement: query, parameters: {}}]}
    //console.log(json)
    request.post({uri: uri, headers: headers, json: json}, (err, res, body) => {
        if(err) throw new Error(err.message)
        //console.log(body)
        const data = body.results[0].data
        console.log('data:')
        console.log(data)
        console.log('2')
        return data
    })
}

终端输出为:

MATCH (n:USER {uuid:"xxx"}) RETURN n;
1
3
results:
undefined
data:
[]
2
一定的表现

runCypherQuery目前未返回任何特殊信息。为此await,您需要明确指定它返回的aPromise将在request完成后解析仅使用await一个async函数并不意味着该async函数在解析之前会等待所有异步操作完成。将基于callback的值转换request为aPromise并返回that Promise,以便可以await正确编辑

module.exports.runCypherQuery = (query) => {
  const headers = { Authorization: 'Basic xxx' }
  const json = {statements: [{statement: query, parameters: {}}]}
  return new Promise((resolve, reject) => {
    request.post({uri: uri, headers: headers, json: json}, (err, res, body) => {
      if(err) reject(err.message)
      //console.log(body)
      const data = body.results[0].data
      console.log('data:')
      console.log(data)
      console.log('2')
      resolve(data)
    })
  })
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章