为什么我的 Promise return 在某些情况下是数据库行,而在其他情况下却不是?
Why does my Promise return a database row in some cases but not in others?
我在模块 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])});
}
然后它成功地将 returned 行输出到控制台日志:
anonymous {
id: 25,
phonenumber: '123456789'}
这就是我想要的。
但是当我这样调用它时,从另一个 Promise-returning 函数的 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()
决议。但我认为 return 承诺意味着第二个 .then()
必须等待第一个 .then()
的 return 值创建的承诺完成。
在我看来,这与Promises无关。当你这样做时
console.log("value "+value.rows[0]);
您正在将 value.rows[0]
转换为字符串,然后输出 value [object Object]
。如果您改用 console.log("value ", value.rows[0])
,您应该会看到所需的输出...
我在模块 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])});
}
然后它成功地将 returned 行输出到控制台日志:
anonymous {
id: 25,
phonenumber: '123456789'}
这就是我想要的。
但是当我这样调用它时,从另一个 Promise-returning 函数的 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()
决议。但我认为 return 承诺意味着第二个 .then()
必须等待第一个 .then()
的 return 值创建的承诺完成。
在我看来,这与Promises无关。当你这样做时
console.log("value "+value.rows[0]);
您正在将 value.rows[0]
转换为字符串,然后输出 value [object Object]
。如果您改用 console.log("value ", value.rows[0])
,您应该会看到所需的输出...