node.js - 让 Cordova 等待异步钩子(Hook)完成

标签 node.js cordova requirejs requirejs-optimizer

在我的 Cordova 项目中,我有一个 Hook ,它在 after_prepare 上执行 RequireJS 优化 (r.js)。该优化本质上是异步的,因此我的 Hook 代码会在所有优化完全完成之前返回。

例如,这会在运行 cordova run browser 时导致问题:在第一个页面加载时,优化尚未完成,网站看起来很糟糕。

有没有办法让 Cordovoa 构建过程阻塞,直到某个钩子(Hook)触发回调?或者优化器可以以阻塞/同步的方式运行吗?

我能想到的另一种方法是使用不同的流程进行优化,并在主体中忙等待它完成,但这对我来说似乎是一种矫枉过正和糟糕的做法。

最佳答案

您可以使用内置的 promise 模块来阻止 Cordova 在 Hook 解决之前继续进行。 沿着这些线的东西:

#!/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;
};

关于node.js - 让 Cordova 等待异步钩子(Hook)完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41086015/

相关文章:

node.js - 为什么 mypartial.ejs 没有显示?

mysql - 如何在sequelize模型中获取继承

cordova - 使用 Typescript 访问 Apache Cordova 插件

RequireJS 模块相互引用

javascript - 我应该将事件绑定(bind)放在 Controller 还是 View 中?

node.js - 语法错误 : Unexpected token import- Node. js

javascript - await 是否保证在 JavaScript 中没有赋值的执行顺序?

iphone - 适用于 iPhone 的 FileUploader 插件 (PhoneGap)

javascript - Apache Cordova 可以编译为旧版 Windows 桌面应用程序(非 Metro)吗?

c# - MVC 应用程序中的 Require.js