要求内部 Q 承诺

Require inside Q promise

我需要在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

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

您需要获得 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');
});

我是 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');
});