需要内部Q承诺

时间:2015-04-27 06:24:58

标签: javascript requirejs q

我需要在Q结构中使用require

Q.fcall(function () {
    console.log('1');
}).then(function () {
    console.log('2');
    require(['myfile'], function () {
        console.log('2.1');
    });
}).then(function () {
    console.log('3');
});

我期待什么?

1 
2
2.1
3

我得到了什么?

1
2
3
2.1

有可能吗?我该如何重写构造?

2 个答案:

答案 0 :(得分:2)

您需要让require使用promise,否则您将拥有两个独立的异步系统。我没有测试过,但是这样的事情应该有效:

Q.fcall(function () {                                                           
    console.log('1');
}).then(function () {
    var deferred = Q.defer();
    console.log('2');
    require(['myfile'], function (myfile) {
        console.log('2.1');
        deferred.resolve(myfile);
    }); 
    return deferred.promise;
}).then(function (myfile) {
    console.log('3');
});

答案 1 :(得分:0)

我是promises的新手。因此我也不确定,但你可以试试这个:

Q.fcall(function () {
   console.log('1');
}).then(function () {
    console.log('2');
    return require(['myfile']);
}).then(function () {
   console.log('2.1');
}).then(function (){
   console.log('3');
});