-1

我正在尝试使用 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:告诉我为什么你不赞成我试图改善我的问题!

4

1 回答 1

-1

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

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

看看这个线程中的第二个答案: How to chain .then functions and callback success function in Angular.js

第二个答案中的更正代码有多个 .then(),与返回正确链接。不幸的是,我不够熟练,无法逐行引导您,您将不得不查找更多的承诺示例。

于 2017-11-03T17:27:32.913 回答