2014-09-10 2 views
0

Я пытаюсь решить проблему, когда я хочу выполнить две синхронные функции. Я работаю изолированно, но не один за другим.Meteor 0.9.1.1: Проблема, выполняющая два синхронных метода Метеор

Я вызываю Meteor.method под названием «createImage», и это вызывает другой метод на сервере под названием «writeImage». После того, как файл был записан, я хочу, чтобы он затем написал CSS в вызове функции writeCss.

Проблема заключается в том, что вызов «writeCss» не вызывается.

Может кто-нибудь предложить способ сортировки этого? Я пытался немного очистить свой код и не допустить, чтобы мой счетчик досрочно закончил.

Meteor.call('createImage', params, function(err, result){ 
      if (!err) { 
       // remove the overlay on success 
       LoadingOverlay.destroyLoadingOverlay(selector); 
      } 
      }); 

createImage: function(params) { 
    console.log('write image'); 
    Meteor.call('writeImage', params); 
    console.log('written image'); 

    /* execution stops here */ 

    console.log('write css') 
    Meteor.call('writeCss', params); 
    console.log('written css') 

    console.log('image and css written') 
    return true; 
}, 


writeImage: function(){ 
    writeImageAsync = function(gm, source, params, publicRoot){ 
    console.log('in writeImageAsync') 
    var im = gm.subClass({imageMagick: true}); 
    im(source) 
    .crop(params.a, params.b, params.c, params.d) 
    .write(publicRoot + 'myimage.png', function(err){ 
    if (err) return console.dir(arguments) 
     console.log('image has been written') 
     /* 
     This is as far as it gets. Doesn't return from here 
     */ 
    }) 
    }; 

writeImageSync = Meteor._wrapAsync(writeImageAsync); 
writeImageSync(gm, source, params, publicRoot); 
} 

ответ

1

При использовании Meteor._wrapAsync обернутый функция вызывается с дополнительным аргументом обратного вызова. Вы должны вызвать этот обратный вызов, когда закончите. Обратный вызов следует за соглашением node.js - его первым аргументом является ошибка или null, если не было ошибки; второй аргумент - возвращаемое значение, если оно есть.

// you probably didn't mean to make a global here 
writeImageAsync = function(gm, source, params, publicRoot, callback){ 
    console.log('in writeImageAsync') 
    var im = gm.subClass({imageMagick: true}); 
    im(source) 
    .crop(params.a, params.b, params.c, params.d) 
    .write(publicRoot + 'myimage.png', function(err){ 
    if (err) { 
     console.dir(arguments); 
     callback(new Error("error writing image")); 
    } else { 
     console.log('image has been written'); 
     callback(null); 
    } 
    }); 
}; 

writeImageSync = Meteor._wrapAsync(writeImageAsync); 
writeImageSync(gm, source, params, publicRoot); 
+0

Это отсортировало это, спасибо, и да, я не собирался делать там глобальный путь :) – user1532669

Смежные вопросы