节点承诺未同步执行

时间:2015-12-08 13:51:41

标签: node.js promise

我正在尝试使用节点promises来创建一个同步调用的序列,以便可以将结果返回给调用者。

我的代码如下所示。

console.log("Call Outer HubTest");
var outerConnection;
var ret = mysql.createConnection({
    host     : 'localhost',
    port     : '3306',
    user     : 'MyUser',
    password : 'MyPwd',
    database : 'MyDb'
}).then(function (conn) {
    console.log("OuterhubTest: Set Connection to "+conn);
    outerConnection = conn; 
}).then(function (result) {
    console.log("OuterhubTest: Connection is"+outerConnection);
    return outerConnection.query("SELECT 1");
}).then(function (rows) {
    console.log("OuterhubTest: Rows of length "+rows.length);
}).catch(function (err) { console.log("Error was "+err)})
console.log("After OuterhubTest");

我观察到的跟踪意味着异步调用链: -

Call Outer HubTest
After OuterhubTest
OuterhubTest: Set Connection to [object Object]
OuterhubTest: Connection is[object Object]
OuterhubTest: Rows of length 1

如果这是同步的,我会期望所有OuterhubTest跟踪都在“After OuterhubTest”之后。我不确定我做错了什么。 提前致谢

1 个答案:

答案 0 :(得分:0)

承诺不是魔术。除了常规JavaScript之外,它们不会做任何事情。

Promise仅在您的示例中看到,只会同步内部承诺链。事实上 - 承诺保证在这种情况下:

log(1);
promise.then(() => log(2));
log(3);

订单始终为1,3,2 - 这是为了避免Zalgo