下面的函数负责管理后端服务中的请求
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
我看到console.log
输出,但函数执行没有终止,响应似乎成功了,但实际上并非如此...这里怎么了?
问题是你总是在兑现诺言。你基本上有这样的:
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.
});
注意return reject
return resolve
。还要注意,您可以解析返回另一个未解析的promise,如果失败,它将在更高级别的catch fromsavedata
中被捕获。
我有一个方法getNextPrime(int num),它应该在该方法接收的值之后识别最接近的质数。 如果num是偶数,它将递增它并再次调用自己。如果它是奇数,它将运行一个for循环来检查它是否可以被3和num的一半值之间的奇数整除。如果是,那么它将把num增加2,方法将再次调用自己,否则它将返回新的num值,这是一个质数。 问题是,当程序到达return语句时,它将跳转到if语句并返回num 1
Creates a new sequence whose values exclude the elements of this sequence identified by the specified predicate. Signature Sequence.reject = function(rejectFn) { /*...*/ } Sequence.reject = function r
我想处理使用者从队列中获得的不成功消息,并将它们重新排队。 想象一下我有这样的情况: 我想请求它,但要将它发送回队列的开头: 我用我的应用程序上的几行代码解决了问题,但我想知道是否存在更好的解决方案,也许直接使用RabbitMQ的某些功能。
我对使用rxjava进行反应性编程是新手,在经历了更简单的示例之后,我现在试图弄清楚如何使用连续流。下面这个例子的问题是,在我接受了3个元素后,程序不会终止。我的假设是,我不知何故需要取消订阅我的可观察的,但我不完全掌握如何终止while循环并使程序退出。 我遇到了下面的RxJava帖子--终止无限流,但我仍然不知道我遗漏了什么。
问题内容: 如何防止gnome-terminal退出给定命令后退出? 我正在从cronjob调用gnome-terminal,以创建用户可访问的终端。最初为终端提供了要运行的特定程序。例如 这很好,除了退出“ myprog”时,gnome-terminal也是如此。我如何保持它运行,而只是回到终端提示符? 问题答案: 尝试这个:
在我的spring boot应用程序中,我有一个组件,它有一个方法,在下面的无限循环中运行一些作业,实际上它检查数据库中的一些数据: