Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
TheShock, интересует ваше мнение =)
var fail = new WaitSync(function () {
console.log('epic fail');
});
badFunction = fail.wrap(function () {
console.log(' imma carryin' damage!');
});
badFunction();
goodFunction = fail.wrap(function () {
console.log('too late :(');
});
setTimeout(goodFunction, 4000);
var test = new WaitSync(function () {
console.log('done');
});
var sameFunction = function () {
console.log('test');
};
var testFn = test.wrap(sameFunction);
var testFn2 = test.wrap(sameFunction);
testFn(); // не вызовет колбэк
testFn2(); // вызовет колбэк
var test = new WaitSync(function () {
console.log('done');
});
var sameFunction = function () {
console.log('test');
};
var testFn = test.wrap(sameFunction); // генерит врап для первой функции
var testFn2 = test.wrap(function() {console.log ('somethingelse')}); // врап второй функции
testFn2(); // не вызовет колбэк, ждем testFn
testFn(); // вызывает колбэк
testFn(); // не вызывает колбэк, т.к. кого надо уже позвали, НО функция будет выполнена
testFn(); // аналогично
var test = new WaitSync(function () {
console.log('done');
});
setTimeout(function () {
$.ajax('c', test.wrap(fnC));
}, 100);
$.ajax('a', test.wrap(fnA));
$.ajax('b', test.wrap(fnB));
var test = new WaitSync(function () {
console.log('done');
});
setTimeout(test.wrap(function () {
$.ajax('c',
test.wrap(fnC)));
}), 100);
$.ajax('a', test.wrap(fnA));
$.ajax('b', test.wrap(fnB));
<source lang="javascript">
// code
</source>
$.ajax({
url: 'something.php',
async: false
});
Может, подскажете, как все-таки «превратить» асинхронную функцию в синхронную?
return result;и сделать подобную операцию и с ним, и так далее.
parallel([
$.get('savannah/get_prey'),
$.get('savannah/get_other_predators')
]).
next(function (results) {
console.log(results);
})
parallel([
function () {
var deferred = new Deferred();
$.get('savannah/get_prey', deferred.callback());
return deferred;
},
function () {
var d = new Deferred();
$.get('savannah/get_other_predators', d.callback());
return d;
}
]).
next(function (results) {
console.log(results);
})
Когда вообще, имхо, придётся использовать эту функцию — так это при асинхронных запросах к базе, если нам необходимо двумя и больше запросами выбрать из разных таблиц пачку данных и сгруппировать в orm.
get : function (fn) {
var data = {};
var set = function (key, value) {
data[key] = value;
if ('article' in data && 'comments' in data) fn(data);
};
this.getArticle(function (article) {
set('article', article);
});
this.getComments(function (comments) {
set('comments', comments);
});
},
get : function (fn) {
var process = fn.after('article', 'comments')
this.getArticle (process.article);
this.getComments(process.comments);
},
$.when($.ajax(...), $.ajax(...)).then(function (resp1, resp2) {
//здесь единый колбэк для всех запросов
});
Синхронизация асинхронных вызовов. WaitSync