Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺处理-更新数据库条目(如果存在)_Javascript_Node.js_Rest_Express - Fatal编程技术网

Javascript 承诺处理-更新数据库条目(如果存在)

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

我在承诺方面遇到了新的挑战

目标:仅当p_键存在时更新DB条目

当前db通过模块公开,模块具有db的get和put方法。双方都有承诺

方法:

  • API使用ID和值集(json)在节点js上调用更新方法处理程序
  • 在db模块的
    get
    方法的post方法调用处理程序中,检查promise success上的值是否为空,如果为是,则返回false,否则返回true
  • 如果是真的;数据存在对db模块的
    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它回答了我的问题。我对答案投了赞成票,但没有思考,因为我很感谢你的回答。这真的帮助我更好地理解承诺处理。代码流也不错。