【发布时间】:2021-03-02 04:44:18
【问题描述】:
以下函数负责管理后端服务中的请求
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 的输出,但是函数执行并没有终止,响应似乎成功但实际上,它不是......这里有什么问题?
【问题讨论】:
-
您正在返回作为参数传递给
.catch的箭头函数,而不是周围的foo函数。 -
我明白了,谢谢。但是我应该如何管理这个你能发布一个替代处理策略吗?
-
这能回答你的问题吗? How to return data from promise
-
这看起来很像
Promiseconstructor antipattern。请edit您的问题包含完整的代码,以便我们可以正确判断您要做什么并建议如何做。 -
很可能, foo() 应该返回自己的承诺,而不是尝试解决/拒绝某些外部
new Promise()。最简单的形式是function foo() { return insertData(fields) }。insertDate()表达式引起的错误将自动反映在返回的 Promise 的结算中。
标签: javascript promise fetch