Javascript 承诺处理-更新数据库条目(如果存在)
我在承诺方面遇到了新的挑战 目标:仅当p_键存在时更新DB条目 当前db通过模块公开,模块具有db的get和put方法。双方都有承诺 方法:Javascript 承诺处理-更新数据库条目(如果存在),javascript,node.js,rest,express,Javascript,Node.js,Rest,Express,我在承诺方面遇到了新的挑战 目标:仅当p_键存在时更新DB条目 当前db通过模块公开,模块具有db的get和put方法。双方都有承诺 方法: API使用ID和值集(json)在节点js上调用更新方法处理程序 在db模块的get方法的post方法调用处理程序中,检查promise success上的值是否为空,如果为是,则返回false,否则返回true 如果是真的;数据存在对db模块的put方法的调用 但不知何故,它总是返回false。即使已通过db api创建了db条目 /** Functio
get
方法的post方法调用处理程序中,检查promise success上的值是否为空,如果为是,则返回false,否则返回true李>
put
方法的调用李>
但不知何故,它总是返回false。即使已通过db api创建了db条目
/** Function to check if p_key exist*/
function checkIfPKExists(idVal){
pkdb.get(idVal).then(function(value){
if(value){
return true;
} else {
return false;
}
},
function(err){
console.log(err);
return false;
})
}
/** UPDATE METHOD **/
var ch = checkIfPKExists("p_k"+req.body.id);
if(!ch){
res.send("pk does not exist oo " + req.body.id);
} else {
var pk_promise = pkdb.put("p_k"+req.body.id, req.body.pk);
pk_promise.then(
function(){
res.send(JSON.stringify(req.body.pk) + "Updated Successfully");
},
function(err){
res.send("Error occurred : " + err);
}
)
}
我的理解是,ch
值是从checkPK
函数设置的,因为这是一个承诺,所以它只需继续处理if
循环,默认情况下该循环为true
,不管元素是否存在相同的结果。没有找到
如何更正它?checkIfPKExists()是一个异步函数,如果要使用ch,必须使用.then()将其放入函数中,然后使用该值
function checkIfPKExists(idVal)
{
return pkdb.get(idVal).then(function(value)
{
if(value)
{
return true;}
else
{
return false;
}
}, function(err)
{ console.log(err);
return false;
})
}
/** UPDATE METHOD **/
checkIfPKExists("p_k"+req.body.id).then(function(ch){
if(!ch)
{
res.send("pk does not exist oo " + req.body.id);
}
else
{
return pkdb.put("p_k"+req.body.id, req.body.pk).then(
function()
{
res.send(JSON.stringify(req.body.pk) + "Updated Successfully");
},
function(err)
{
res.send("Error occurred : " + err);
})
}})
一个问题是
checkIfPKExists()
函数调用中没有返回值,请参阅。使用.then()
和.catch()
获取函数返回的Promise
值
function checkIfPKExists(idVal) {
// `return` the `Promise` here
return pkdb.get(idVal).then(function(value) {
if (value) {
return true;
} else {
return false;
}
}, function(err) {
console.log(err);
return false;
})
}
/** UPDATE METHOD **/
var ch = checkIfPKExists("p_k" + req.body.id);
ch.then(function(bool) {
// if `true` do stuff
if (bool) {
var pk_promise = pkdb.put("p_k" + req.body.id, req.body.pk)
return pk_promise.then(function() {
return res.send(JSON.stringify(req.body.pk) + "Updated Successfully");
}, function(err) {
return res.send("Error occurred : " + err);
})
} else {
// do other stuff
return res.send("pk does not exist oo " + req.body.id);
})
.catch(function(err) {
// handle error
})
注意,
checkIfPKExists()Answer@marvel308它回答了我的问题。我对答案投了赞成票,但没有思考,因为我很感谢你的回答。这真的帮助我更好地理解承诺处理。代码流也不错。