色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 異步循環

謝彥文1年前6瀏覽0評論

在前端開發中,JavaScript是一種十分重要的編程語言。在開發過程中,我們經常需要處理一些耗時的任務,如果我們使用同步代碼來完成則程序會被堵塞,阻塞后續程序的執行,這時我們就需要使用異步循環來進行操作,下面我將為大家詳細介紹一下JavaScript異步循環。

異步循環指的是讓程序在執行異步代碼時不會停滯,從而能夠順利的執行其他程序。在ES6以前,我們通過回調函數來實現異步循環,這種方法常常會造成回調函數嵌套過深的問題,難以維護代碼。ES6中添加了異步/等待(async/await)語法糖來解決這個問題。

async function getData(){
let result = await fetchData();
return result;
}

在上面的代碼中,async關鍵字表明該函數將會異步執行。await表明我們需要等待fetchData函數返回結果后再執行getData函數。

接下來,我們將用一個例子來獲取百度搜索結果的頁面標題。使用JSDOM模塊模擬瀏覽器環境,然后使用異步循環代碼并使用Promise來處理返回結果。

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const request = require('request');
function getTitles(keywords){
let urls = [];
let titles = [];
for(let keyword of keywords){
urls.push(`https://www.baidu.com/s?ie=utf-8&wd=${encodeURIComponent(keyword)}`);
}
return Promise.all(
urls.map(url =>{
return new Promise((resolve, reject) =>{
request(url,function(err,res,body){
if(err){ 
reject(err);
return;
}
const dom = new JSDOM(body,{runScripts:'dangerously'});
const title = dom.window.document.querySelector('title').textContent;
titles.push(title);
resolve(title);
})
});
})
)
}
(async function(){
const keywords = ['JavaScript','CSS','HTML5'];
try{
const result = await getTitles(keywords);
console.log(result);
}catch(err){
console.error(err);
}
})();

上面的代碼中,我們為每個網址創建了一個Promise對象。當我們使用Promise.all()方法時,所有的Promise對象都被resolve或者有任意一個Promise對象被reject,Promise.all()的返回結果才被resolve。所有的結果被放在一個數組中返回給我們。

在這個例子中,我們使用了異步循環和Promise來進行操作,這樣我們就可以避免程序被一些耗時任務阻塞了。異步循環在前端開發中有著非常重要的意義,幫助我們更加高效的編寫代碼。