Dieses Mal zeige ich Ihnen, wie Sie die asynchrone Knoten-Async/Await-Programmierung optimieren können. Lasst uns zusammenkommen. Schaut mal rein.
1. Die ultimative Lösung für asynchrone ProgrammierungVor ein paar Tagen habe ich einen Artikel über Javascript
asynchrone Operationen geschrieben " Ausführliche Erklärung von Javascript Promise. Als ich kürzlich Puppeteer lernte, entdeckte ich eine andere asynchrone Programmierlösung: Async/Await. Ein Programm, das versucht, dieses Problem zu lösen. Von der frühestenRückruffunktion über das Promise Objekt
bis hin zur Generatorfunktion gibt es jedes Mal Verbesserungen, aber es fühlt sich unvollständig an. Sie alle weisen zusätzliche Komplexitäten auf und erfordern ein Verständnis der zugrunde liegenden Betriebsmechanismen der Abstraktion.Nachdem die Async-Funktion herauskam, dachten einige Leute, sie sei die ultimative Lösung für die asynchrone Programmierung. Denn bei Async/Await müssen Sie sich keine Gedanken darüber machen, ob es sich um eine asynchrone Programmierung handelt.
2. Grundlegende VerwendungDie asynchrone Funktion gibt ein Promise-Objekt zurück, und Sie können die Methode then verwenden, um eine Rückruffunktion hinzuzufügen. Wenn die Funktion ausgeführt wird und auf das Warten stößt, kehrt sie zuerst zurück, wartet, bis der ausgelöste asynchrone Vorgang abgeschlossen ist, und führt dann die nachfolgenden Anweisungen im Funktionskörper aus. Das Folgende ist eine Kastanie:
var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, time); }) }; var start = async function () { // 在这里使用起来就像同步代码那样直观 console.log('start'); await sleep(3000); console.log('end'); }; start();
1. Der Befehl „await“ kann nur in asynchronen Funktionen verwendet werden gemeldet. async function dbFuc(db) {
let docs = [{}, {}, {}];
// 报错
docs.forEach(function (doc) {
await db.post(doc);
});
}
var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () { // 返回 ‘ok' resolve('ok'); }, time); }) }; var start = async function () { let result = await sleep(3000); console.log(result); // 收到 ‘ok' };
async function dbFuc(db) { let docs = [{}, {}, {}]; // 可能得到错误结果 docs.forEach(async function (doc) { await db.post(doc); }); }
async function dbFuc(db) { let docs = [{}, {}, {}]; let promises = docs.map((doc) => db.post(doc)); let results = await Promise.all(promises); console.log(results); }
Da es keine Notwendigkeit gibt, .then(..) zu schreiben, besteht keine Notwendigkeit, zu schreiben .catch(..) entweder können Sie direkt die standardmäßige Try-Catch-Syntax verwenden, um Fehler abzufangen. var sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
// 模拟出错了,返回 ‘error'
reject('error');
}, time);
})
};
var start = async function () {
try {
console.log('start');
await sleep(3000); // 这里得到了一个返回错误
// 所以以下代码不会被执行了
console.log('end');
} catch (err) {
console.log(err); // 这里捕捉到错误 `error`
}
};
Wie React die Anmeldeüberprüfungskontrolle im React-Router-Routing implementiert
Der Routing-Schutz im Angular-Routing So verwenden Sie
Das obige ist der detaillierte Inhalt vonSo optimieren Sie die asynchrone Node-Async/Await-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!