【发布时间】:2019-01-12 01:14:44
【问题描述】:
我有一个异步函数,它使用 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
【问题讨论】:
-
可能的重复涉及到使用 JQuery 和回调,我已经检查了这篇文章,干杯。
-
@MarkTyers 问题仍然相同
$.ajax( { ..., success: function(response) {...})相当于您的request.post({...}, (err, res, body) => {...})都使用回调来处理异步结果。解决方案是将该代码包装到一个新的 Promise 中,以将旧的基于回调的异步结果处理转换为基于 Promise 的版本。 -
与您的问题无关,但您认为
result !== []应该做什么?这将始终评估为true。
标签: javascript node.js promise async-await