gpt4 book ai didi

node.js - 为什么我的 Promise 在某些情况下返回数据库行,而在其他情况下则不返回?

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:47 25 4
gpt4 key购买 nike

我在模块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 返回函数的 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() 是否正在完成并在 db.addUser(num) 调用完成之前启动 .then() 解析。但我认为返回一个promise意味着第二个.then()必须等待第一个.then()的返回值创建的promise完成。

最佳答案

在我看来,这与 Promise 无关。当你这样做时

console.log("value "+value.rows[0]);

您正在将value.rows[0]转换为字符串,然后输出value [object Object]。如果您使用 console.log("value ", value.rows[0]) 代替,您应该会看到所需的输出...

关于node.js - 为什么我的 Promise 在某些情况下返回数据库行,而在其他情况下则不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com