欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

node.js中怎么判斷執(zhí)行是否完成

今天就跟大家聊聊有關(guān)node.js中怎么判斷執(zhí)行是否完成,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比全南網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式全南網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋全南地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴(lài)。

方案一:判斷請(qǐng)求到的數(shù)據(jù)條目

// 模擬網(wǎng)絡(luò)請(qǐng)求
function fetch(url, callback) {
 setTimeout(function (){
 callback(null, {
  subjects: [{
   data: Math.round(Math.random() * 100)
  }]
  });
 }, 2000);
}
// 實(shí)現(xiàn)方案1
function multiTask_1 () {
 var arr = [];
 var baseUrl = 'https://api.douban.com/v2/movie/top250';
 for (var start = 0; start < 10; start++) {
 var url = baseUrl + '?start=' + start + "&count=1";
  fetch(url, function(error, res) {
  var data = res.subjects;
  arr = arr.concat(data);
  // 調(diào)用完成后統(tǒng)一處理
  if (arr.length === 10) {
   console.log(arr);
  }
 });
 }
}

將運(yùn)行結(jié)果用arr.length來(lái)判斷,如果arr.length不像我們期望的那樣,比如由于網(wǎng)絡(luò)傳輸或者處理異常,少一條,那么我們將無(wú)法做后續(xù)的處理。這種處理方式強(qiáng)業(yè)務(wù)耦合;不具有普適性。

方案二:判斷異步過(guò)程執(zhí)行次數(shù)

// 方案2
function multiTask_2 () {
 var taskWatcher = 0;
 var arr = [];
 var baseUrl = 'https://api.douban.com/v2/movie/top250';
 for (var start = 0; start < 10; start++) {
 taskWatcher++;
 var url = baseUrl + '?start=' + start + "&count=1";
 fetch(url, function(error, res) {
  var data = res.subjects;
  arr = arr.concat(data);
  taskWatcher--;
  if (taskWatcher === 0) {
   console.log(arr);
  }
 });
 }
}

方案2 的判斷條件,這里的 taskWatcher 充當(dāng)異步任務(wù)執(zhí)行情況的觀(guān)察員,僅與異步過(guò)程的調(diào)用次數(shù)有關(guān),且與其他處理過(guò)程無(wú)關(guān)。那有沒(méi)有其他方案呢

方案三:Promise.all()

Promise.all(iterable) 方法返回一個(gè) Promise, 它將在上述可迭代對(duì)象中的所有 Promise 被 resolve 之后被 resolve,或者在任一 Promise 被 reject 后被 reject。

function multiTask_3 () {
 // var taskWatcher = 0;
 var taskStack = [];
 var arr = [];
 var baseUrl = 'https://api.douban.com/v2/movie/top250';
 for (var start = 0; start < 10; start++) {
 taskStack.push(
  new Promise((resolve, reject) => {
  var url = baseUrl + '?start=' + start + "&count=1";
  fetch(url, function(error, res) {
   var data = res.subjects;
   arr = arr.concat(data);
   resolve();
  });
  })
 );
 }
 Promise.all(taskStack).then(function () {
 console.log(arr);
 });
}

這種方式更具有通用性,如果異步任務(wù)類(lèi)型不同,也可以用這種方式來(lái)解決。不過(guò)應(yīng)當(dāng)注意reject的處理。避免其對(duì)最終處理的影響。

方案四: EventProxy

EventProxy是樸靈寫(xiě)的,https://github.com/JacksonTian/eventproxy

 var ep = new EventProxy();
 var arr = [];
 ep.after('fetchData', 10, function (list) {
 list.forEach(function(item){
  arr = arr.concat(item); 
 });
 console.log(arr);
 });
 var baseUrl = 'https://api.douban.com/v2/movie/top250';
 for (var start = 0; start < 10; start++) {
 var url = baseUrl + '?start=' + start + "&count=1";
  fetch(url, function(error, res) {
  var data = res.subjects;
  ep.emit('fetchData', data);
 });
 }

EventProxy基于事件訂閱/發(fā)布模式,這里的after 方法可以偵聽(tīng)多次事件,回調(diào)中保存了多次異步任務(wù)的數(shù)據(jù)結(jié)果的數(shù)組;除此之外EventProxy還支持多個(gè)不同事件的偵聽(tīng)和處理。

看完上述內(nèi)容,你們對(duì)node.js中怎么判斷執(zhí)行是否完成有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

當(dāng)前題目:node.js中怎么判斷執(zhí)行是否完成
地址分享:http://www.chinadenli.net/article36/pgiepg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)用戶(hù)體驗(yàn)軟件開(kāi)發(fā)網(wǎng)站設(shè)計(jì)網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)