Невозможно заставить работать асинхронный JavaScript
Я использую node.js, RailwayJS и JugglingDB.
У меня есть модель:
Model.afterInitialize = function() {
var me = this;
Sequence.getSequence('forModel', function(sequence) {
me.serialId = sequence;
});
me.title = 'Hello';
}
После того, как это все сделано, только атрибут title
установлено. Это не удивительно, но я не могу заставить его работать. Я пытался использовать async
Модуль без удачи.
3 ответа
Model.afterInitialize
является частью стороннего API, который я не могу изменить, поэтому, к сожалению, нет способа сделать это. Я надеялся, что какая-то проверка бесконечного цикла на наличие флага сработает, но это не сработает, и это будет уловкой, даже если это сработает.
Я в конечном итоге подключился к другому методу Model.beforeSave = function(callback) {};
, который требует обратного вызова.
К вашему сведению, я использовал https://github.com/1602/jugglingdb
Добавлен параметр обратного вызова для возможности цепочки.
Model.afterInitialize = function(then)
{
then = then || function(me) { };
var me = this;
Sequence.getSequence('forModel', function(sequence)
{
me.serialId = sequence;
me.title = 'Hello';
then.call(null, me);
});
};
Если Sequence.getSequence
асинхронный, serialId
будет установлен из обратного вызова, когда он вызывается. Поскольку это асинхронный, это, вероятно, после Model.afterInitialize
возвращается. Если вам нужно выполнить операции, которые зависят от serialId
быть застреленным из Sequence.getSequence
Перезвоните.