在我的cordova项目中,我有一个钩子,它需要在after_prepare上进行js优化(r.js)。这种优化本质上是异步的,所以我的钩子代码在所有优化完成之前返回。
例如,这会导致在第一页加载时运行cordova run browser时出现问题:优化尚未完成,站点看起来已损坏。
有没有办法让cordovoa构建过程阻塞,直到某个钩子触发回调?或者优化器可以以阻塞/同步的方式运行吗?
我可以考虑的另一种方法是使用不同的流程进行优化,主要是忙着等待它完成,但对我来说,这似乎是一种过分的做法和不好的做法。

最佳答案

您可以使用内置的Promise模块阻止Cordova继续,直到钩子解决为止。
大致如下:

#!/usr/bin/env node

var deferral;

function doSomethingAsync(){
    somethingAync
        .success(function(){
            deferral.resolve();
        })
        .fail(function(err){
            deferral.reject(err);
        });
}

module.exports = function(ctx) {
    deferral = ctx.requireCordovaModule('q').defer();
    doSomethingAsync();
    return deferral.promise;
};

08-04 01:28