我正在尝试使用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:告诉我为什么你试图改进我的问题!
答案 0 :(得分:-1)
*警告:我自己是一个相对的JS新手,但由于还没有其他人回答,我认为我可以在此期间提供一些帮助 - 不是吨,我不是专家,但可能足够指出你正确的方向。
问题是你是如何尝试将.then()连接在一起,一个接一个。为了在结尾链接另一个.then(),第一个.then()必须返回一个函数(该函数可以返回你的test_films)。就目前而言,你现有的.then()只返回变量test_films - 它需要返回一个完整的函数。
看一下这个帖子中的第二个答案: How to chain .then functions and callback success function in Angular.js
第二个答案中的更正代码有多个.then(),正确链接返回。不幸的是,我没有足够的技能来逐步引导你,你必须查找更多的承诺例子。