我正在尝试使用节点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”之后。我不确定我做错了什么。 提前致谢
答案 0 :(得分:0)
承诺不是魔术。除了常规JavaScript之外,它们不会做任何事情。
Promise仅在您的示例中看到,只会同步在内部承诺链。事实上 - 承诺保证在这种情况下:
log(1);
promise.then(() => log(2));
log(3);
订单始终为1,3,2
- 这是为了避免Zalgo。