我有一个异步函数,它使用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] 删除。
我来说两句