我在模块db
中有一个函数,它使用node-postgres将新行插入数据库:
module.exports={addUser: function(phonenumber){
return new Promise(function(resolve,reject){
queryStr='insert into users (phonenumber,status,exitStatus) values (\''+phonenumber+'\') returning *';
pool.query(queryStr,(err,res)=>{
if (err){
reject(err);
}
else{
resolve(res);
}
});
});
}
}
当我这样称呼时:
var number=123456789;
testAddUser(number);
function testAddUser(phonenumber){
db.addUser(phonenumber).then(val=>{console.log(val.rows[0])});
}
然后它成功将返回的行输出到控制台日志:
anonymous {
id: 25,
phonenumber: '123456789'}
这就是我想要的。
但是当我这样称呼它时,来自另一个Promise-returns函数then
:
db.someOther_promise(num).then(value=>{
doSomeStuff();
return db.addUser(num);
}).then(value=>{
console.log("value "+value.rows[0]);
})
然后我只得到输出:
value [object Object]
这让我想知道someOther_promise()
呼叫在.then()
呼叫完成之前是否正在完成并启动db.addUser(num)
分辨率。但我认为返回一个promise意味着第二个.then()
必须等待第一个.then()
的返回值创建的promise才能完成。
答案 0 :(得分:3)
在我看来,这与Promises无关。当你这样做
console.log("value "+value.rows[0]);
您要将value.rows[0]
转换为字符串,然后输出value [object Object]
。如果您使用console.log("value ", value.rows[0])
,则应该看到所需的输出...