2016-12-11 10 views
1

В моем проекте «Кордова» у меня есть крючок, который выполняет оптимизацию RequireJS (r.js) на after_prepare. Эта оптимизация по сути асинхронна, поэтому мой код hook возвращается до того, как вся оптимизация полностью завершена.Сделать Кордову ждать, пока асинхронный крючок закончен

Например, это вызывает проблемы при запуске cordova run browser: при загрузке первой страницы оптимизация еще не завершена, и сайт выглядит сломанным.

Есть ли способ сделать процесс сборки Cordovoa заблокированным, пока определенный крючок не вызовет обратный вызов? Или может быть оптимизатор запущен с блокировкой/синхронизацией?

Альтернатива, о которой я мог подумать, заключается в использовании другого процесса оптимизации и оживления в основном для его завершения, но это похоже на чрезмерную и плохую практику для меня.

ответ

1

Вы можете использовать встроенный модуль обещаний, чтобы заблокировать Кордову от продолжения до тех пор, пока крюк не разрешится. Что-то в этом стихе:

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

Замечательно, именно то, что я искал. Мне так или иначе не удалось найти это в документах ... –