以下函数负责管理后端服务中的请求
const saveData = (body) => {
// console.log("in save method body: ", JSON.stringify(body), "\n")
return new Promise(function(resolve, reject) {
const {fields, item} = body
pool.query('Select count(1) as record_count from my_table where id= $1', [fields.id], (error, results)=>{
if(error){
reject(error)
return
}
if(results && results.rows && results.rows[0].record_count > 0){
console.log("in update fields are ", fields, "\n")
updateData(fields).catch(error =>{
reject(error)
return
})
}
else{
console.log("in insert fields are \n", fields, "\r\n")
insertData(fields).catch(error =>{
console.log("error is ", error)
reject(error)
return
})
}
insertDataDetail(item).then().catch(error => {
reject(error)
return
})
})
resolve("Save is done")
})
}
insertData(..)
返回Promise<QueryResult<R>>
我明白了console.log
输出但函数执行并没有终止,响应看起来成功但实际上不是...这里出了什么问题?
最佳答案
问题在于你总是在兑现 promise 。你基本上有这个:
const saveData = () => {
return new Promise((resolve, reject) => {
// you call the query function which is async
resolve("Save is done"); // this is always resolving the function before the query runs
});
}
相反,您需要这样做:
const saveData = () => new Promise((resolve, reject) => {
pool.query('query', [], (err, results) => {
if (err) {
return reject(err);
}
// whatever else you check
return reject(new Error('something is not like I want it'));
// everything is fine, continue
return resolve(insertDataDetail(item));
});
// if you put something here it will run before the query is ran.
});
注意返回拒绝
| 返回解析
。
另请注意,您可以解决返回另一个 Unresolved promise ,如果失败,它将被 saveData
的更高级别的捕获捕获。
关于javascript - reject() 和 return 不会终止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64901147/