node.js中的请求 - 承诺缺乏理解

时间:2017-11-03 16:31:13

标签: node.js promise request-promise

我正在尝试使用request-promise从数据库中的js对象插入数据,并使用POST的响应更新对象,但我不知道如何在最后的.then()中获取更新的对象

我不理解非常好的承诺,也不知道如何管理if ... else

var rp = require('request-promise')

var test_films = require("./films.json")

function searchPerson(persons, firstname, lastname) {
  return persons.filter(function (p) {
    return p.firstname == firstname && p.lastname == lastname
  })
}

var options = {
  uri: 'http://my-api',
  json: true
}

rp(options)
.then(function (persons) {
  test_films.forEach(function(comedien) {

    var found = searchPerson(persons, comedien.firstname, comedien.lastname)

    if (found.length === 0) {
      console.log('user: ' + comedien.firstname + ' ' + comedien.lastname + ' not found, insert it!')

      options = {
        method: 'POST',
        uri: 'http://my-api',
        formData: {
          firstname: comedien.firstname,
          lastname: comedien.lastname
        },
        json: true
      }
      // POST actor and insert id created in array
      rp(options)
      .then(function (body) {
        comedien.person_id = body.id
      })
      .catch(function (err) {
        console.log(err)
      })
    }
    else {
      console.log('User: ' + comedien.firstname + ' ' + comedien.lastname + ' already exists!')
      comedien.person_id = found[0].id
    }
  })
  return test_films
})
.then(function (result) {
  // The object is not updated after i insert it in database
  console.log(result)
})
.catch(function (err) {
  console.log(err)
})

感谢您的帮助!

PS:告诉我为什么你试图改进我的问题!

1 个答案:

答案 0 :(得分:-1)

*警告:我自己是一个相对的JS新手,但由于还没有其他人回答,我认为我可以在此期间提供一些帮助 - 不是吨,我不是专家,但可能足够指出你正确的方向。

问题是你是如何尝试将.then()连接在一起,一个接一个。为了在结尾链接另一个.then(),第一个.then()必须返回一个函数(该函数可以返回你的test_films)。就目前而言,你现有的.then()只返回变量test_films - 它需要返回一个完整的函数。

看一下这个帖子中的第二个答案: How to chain .then functions and callback success function in Angular.js

第二个答案中的更正代码有多个.then(),正确链接返回。不幸的是,我没有足够的技能来逐步引导你,你必须查找更多的承诺例子。