Některé jazyky poskytují speciální jazykovou konstrukci pro řešení tohoto problému. Například C# má async
/await
klíčová slova, která vám umožní psát kód, jako byste volali synchronní API.
JavaScript ne a musíte zřetězit createAccount
volání se zpětným voláním.
Někteří lidé vyvinuli knihovny, které vám mohou pomoci uspořádat tento kód. Například async , krok , node-promise a Q
Můžete také použít vlákna library, nativní knihovna, která rozšiřuje běh JavaScriptu o vlákna / korutiny.
A někteří lidé rozšířili jazyk o konstrukce, které jsou podobné async
/await
:streamline.js
, IcedCoffeeScript
nebo wind.js
. Například streamline.js (jsem autor, takže jsem zjevně zaujatý) používá _
jako speciální zástupný symbol zpětného volání a umožňuje vám napsat příklad jako:
var db = MongoClient.connect("mongodb://localhost:27017/bq", _):
var accounts = db.createCollection('accounts', _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
function createAccount(email, password, _) {
var item = accounts.findOne({"email":email}, _);
if (item === null) {
accounts.insert({"email":email, "password":password}, _);
console.log("Account " + email + " created."); }
} else {
console.log("Account already exists.")
}
}
A v neposlední řadě nové jazykové funkce, jako jsou generátory a odložené funkce jsou diskutovány pro budoucí verze JavaScriptu (generátory velmi pravděpodobně přistanou v ES6, odložené funkce se zdají být trochu zablokované).
Máte tedy mnoho možností:
- držte se zpětných volání
- použijte pomocnou knihovnu
- použijte rozšíření běhového prostředí vláken
- použijte jazykové rozšíření
- počkej na ES6