2016-02-26 2 views
-1

Я пытаюсь использовать модуль synchronize.js в моем приложении node.js, но я терплю неудачу. Функции все еще не работают, и я не получаю свои данные. Вот общий фрагмент моего кода.Не могу понять, как использовать synchronize.js в node.js

// an object with devices to migrate 
var devices2Migrate = 
{ 
device_array: [], 

init: function (done) 
{ 
    sync.fiber(function() 
    { 
     //do init stuff 
     console.log('yay we have a DB connector'); 
     DB1.connect(function(err) 
     { 
      console.log('Database 1 is connected ...'); 
     } 
     DB2.connect(function(err) 
     { 
      console.log('Database 2 is connected ...'); 
     } 

    }, done); 
}, 

loadDevices2Migrate: function (done) 
{ 
    var self = this; 
    sync.fiber(function() 
    { 
     //get stuff from DB using query() 
    }, done); 
} 
}; //end of object 

// load up all the data for the devices using the old style tables 
    sync.fiber(function(){ 
     sync.await(devices2Migrate.init(sync.defer())); 
     sync.await(devices2Migrate.loadDevices2Migrate(sync.defer())); 

     console.log( devices2Migrate.device_array); 
     console.log( "size: " + devices2Migrate.device_array.length); 
    }); 

Но что происходит, является то, что console.log показывает, что функции не ждут:

yay we have a DB connector 
[] 
size: 0 
Database 1 is connected ... 
Database 2 is connected ... 

Может кто-нибудь мне точку к тому, что я делаю неправильно? Я могу заполнить тела методов больше, если это необходимо, я просто пытался сначала сохранить его. Я знаю, что мои методы (функции) верны, потому что если я завершу нижние вызовы console.log (те, что в волокне) в обратном вызове setTimeout, тогда я получу свои данные.

+0

Вы должны обещаниям – Derek

+0

@Oliver Можете ли вы предоставить ссылку или что-то. В модуле synchronize.js ничего не говорится о необходимости таких вещей. [Эта страница] (https://mixmax.com/blog/node-fibers-using-synchronize-js) указывает, что обещания не используются/необходимы для модуля синхронизации. – Aaron

+0

Есть ли причина, по которой вы хотите использовать модуль синхронизации? – Derek

ответ

1

Я закончил использовать пакет async.js. Это было более «дружелюбным к пользователю», поскольку оно сработало!

EDIT: в асинхронном, я сделал это:

// load up all the data for the devices using the old style tables 
async.series(
    devices2Migrate.init(callback), 
    devices2Migrate.loadDevices2Migrate(callback) 
){ 
    // land here when done 
    console.log( devices2Migrate.device_array); 
    console.log( "size: " + devices2Migrate.device_array.length); 
}); 
+0

Я имею в виду ... sync woulda работал, если вы использовали его правильно, просто скажите. –

+0

Спасибо за проголосовать! @Kevin: Может быть, какая-то лучшая помощь заставила бы меня перепрыгнуть через горб. Но, как вы видите, на syncronize.js есть нулевые ответы. Я не смог решить свою проблему с помощью синхронизации, поэтому я попробовал async.js и следил за документацией, это просто сработало! Так что это мой ответ, и я придерживаюсь этого. Спасибо за ВАШУ помощь! – Aaron

+2

Сдвиг был вызван тем, что вы не нашли решения. Я уверен, что async.js помог вам (и я думаю, что это лучшая альтернатива synchronize.js,), но сделайте ответ полезным! –

0

При работе с узлом, this is my favourite package обещаний:

Простое обещание:

return when.promise(function(resolveCallback, rejectCallback) { 
     //do something here 
    var blah = foo("bar"); 

    //return callback like this 
    resolveCallback(); 
}); 

Прикованный обещание:

возвращение when.promise (функция (resolveCallback, rejectCallback) {// делать что-то здесь var blah = foo ("bar");

//return callback like this 
resolveCallback(); 

}), затем (x);

var x = function(){ 
    return when.promise(function(resolveCallback, rejectCallback) { 
     //do something here 
     var blah = foo("bar"); 

     //return callback like this 
     resolveCallback(); 
     }); 
}; 
Смежные вопросы