Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Я могу взять и сделать в одну строку из десятка Future один единственный и ждать его исполнения.
callback hell так же отлично спасают промисы.Для колбэков мне придется писать обертку, которая либо будет считать количество окончившихся функций, либо станет полноценным Deferred/Promise. Да, да, я знаю про существование подобных библиотек для JavaScript. Но это же просто раздутые обертки к тем самым колбэкам.
Написал бы я сейчас на JavaScript лучше, чем тогда? Несомненно. Это, возможно, даже выглядело и работало бы попроще. Опыт в решении задач одного типа — это опыт, его не пропьешь.
Господа, но колбэки не компонуются! Это гребаный приговор.
nano src/cookie_storage.erl; rebar compile; erl -remsh spider@localhost; l(cookie_storage). и вот уже паук работает на подправленной версии). val command =
BSONDocument(
"aggregate" -> "rooms",
"$pipeline" -> BSONArray(
BSONDocument("$match"->BSONDocument("owner._id"->userId)),
BSONDocument("$group"->BSONDocument("_id"->"$language", "count"-> BSONDocument("$sum"->1)))
)
)
val comm = Aggregate("rooms", Seq(
Match(BSONDocument("owner._id"->userId)),
GroupField("language")("count"->SumValue(1))
))
Db.db.command(comm)
Господа, но колбэки не компонуются! Это гребаный приговор.
db.getData(filter, function(error, someData) {
});
db.getAnotherData(anotherFilter, function(error, anotherData) {
});
val futureResult = db.getData(filter)
val anotherFutureResult = db.getAnotherData(anotherFilter)
//Future[MyDataObj]
val completeResult = for(result <- futureResult; anotherResult <- anotherFutureResult) yield MyDataObj(result, anotherResult)
Q.when([
Q.nfcall(db.getData, filter),
Q.nfcall(db.getAnotherData,anotherFilter)
]).done(function(){});
var futureResult = db.getData.bind(db, filter);
var anotherFutureResult = db.getAnotherData.bind(db, anotherFilter);
waitFor(futureResult, anotherFutureResult, function(error, someData, anotherData) {
// ... do the job
});
function waitFor() {
var args = Array.prototype.slice.call(arguments);
var done = args[args.length - 1];
var result = new Array(args.length - 1);
var hasError = false;
var left = args.length - 1;
args.slice(-1).forEach(function(asyncFn, i) {
asyncFn(function(error) {
if (error) {
hasError = true;
return done(error);
}
result[i] = Array.prototype.slice.call(arguments, 1);
left--;
if (left === 0) {
return done.apply(null, [null].concat(result));
}
});
});
}
Как я проект с JavaScript на Scala переписывал