为什么我的 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]),您应该会看到所需的输出...