试图了解承诺的范围

时间:2015-04-02 13:29:10

标签: javascript node.js asynchronous

承诺令人困惑。下面显然是不好的,不完整的,而不是我实际上会怎么做,但应该足以澄清我的问题。

鉴于以下代码,if语句是否被阻止,直到User.find承诺得到解决?或者它最终是console.log的竞争条件?

var user = null;

if (....) {
     User.find(123)
         .on("success", function(u) {
            user = u;
          });
}
else {
   // do something else to user
 }

 console.log(user.Name);

同样,如果在promise中调用了promise,那么外部promise(User.find)会被阻塞,直到内部的(Posts.findAll)被解析?我再次知道这是糟糕的代码,只是试图弄清楚我脑子里的流量和范围。

var postlist = [];    
User.find(123)
     .on("success", function(user) {
       Posts.findAll({where:{user_id:user.id}})
            .on("success", function(posts) { postlist = posts});
     });
console.log(postlist);

同样,我并不是在寻找“正确或最好”的方法,只是试图掌握流量和范围。很抱歉继续重复它,但我已经厌倦了那些没有回答提出建议的问题的人 - 在其他网站上的糟糕经历,希望不会在这里发生。

1 个答案:

答案 0 :(得分:2)

承诺不会阻止。代码执行同时继续。