为什么我的Promise在某些情况下返回数据库行但在其他情况下不返回?

时间:2018-03-18 21:16:58

标签: node.js promise node-postgres

我在模块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才能完成。

1 个答案:

答案 0 :(得分:3)

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

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

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