【问题标题】:node promise is not executing synchronously节点承诺未同步执行
【发布时间】:2015-12-09 05:28:49
【问题描述】:

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

我的代码如下所示。

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 跟踪都在“OuterhubTest 之后”之前。我不确定我做错了什么。 提前致谢

【问题讨论】:

  • Promise 不会使异步代码同步。
  • Promise 本质上是异步的。

标签: node.js promise


【解决方案1】:

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

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

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

顺序将始终为1,3,2 - 这是为了避免Zalgo

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 2016-03-27
    • 2016-02-01
    • 2016-01-08
    • 2021-06-18
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多