国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在非阻塞IO下的nodejs下的同步并行 ES6的 promise 從入門深入(二)

verano / 868人閱讀

摘要:現在我們要用的重點就是我們的,這是一個能讓函數并行的,可以基于多個。非常有用啊先上一個錯誤的代碼這時候我們得到的就是數字了,而不是一個數組,這就是神奇所在。

看過 (一)的同學一定覺得這個Promise很簡單,好像沒什么可以用的地方,但是事實上,它的用處非常大啊,尤其是在nodejs上,愈加重要,雖然已經有大量的庫實現了對Promise的封裝了,不過我還是更傾向用原生的node來實現對Promise的實現。
現在我們要用的重點就是我們的Promise.all,這是一個能讓函數并行的promise,可以基于多個Promise。我們講介紹下簡單的應用和在復雜的環境下的一些使用方法.

兩個demo函數
function demo1(){
    return Promise.resolve(1);
}
function demo2(){
    return Promise.resolve(2);
}
function demo3(){
    return Promise.all([demo1(),demo2()]);
}

demo3().then(result=>{
    console.log(result)
}).catch(err=>{
    console.log(err)
})

基于以上的代碼,你將得到一個數組,獲得[1,2],其原理很簡單,就是讓兩個函數同時開始異步操作,就是并行拉,然后返回的數據存放在一個數組,并且是按順序的!!!而且注意,在Promise.all中,如果其中一個操作獲得了reject或是error,那么我們都將得到一個reject,并且,這兩個操作的最終時長是取決于兩者中最長的那個,直到兩個都完成了才能返回結果。非常有用啊!!

先上一個錯誤的代碼

function demo1(){
    return Promise.resolve(1);
}
function demo2(){
    return Promise.reject(2);
}
function demo3(){
    return Promise.all([demo1(),demo2()]);
}

demo3().then(result=>{
    console.log(result)
}).catch(err=>{
    console.log(err)
})


這時候我們得到的就是數字2了,而不是一個數組,這就是神奇所在。
再最后一個例子就是Promise.race 這個簡單介紹以下就好了,因為這個不常用,想想也知道你說你要執行兩個操作,只要完成其中一個就返回其中一個的結果,除非是賽跑,不然這個東西有什么意義,比較難想象有能運用的地方,我寫了這么就的Promise就是沒用遇到過了!下面是例子

function demo1(){
    return Promise.resolve(1);
}
function demo2(){
    return Promise.resolve(2);
}
function demo3(){
    return Promise.race([demo1(),demo2()]);
}

demo3().then(result=>{
    console.log(result)
}).catch(err=>{
    console.log(err)
})


我們得到的結果將會是1或2,跟前面的reject一樣,如果其中之一來reject,或是異常,一定會被catch捕獲!這是毋庸置疑的,但前提是在兩個之一都沒有完成的情況下才能被捕獲,所以是十分困難的。

運用以上的所有內容就基本能解決我們在項目中的大部分問題了,但是偶爾我們會遇到比較難的問題,下面拿我使用mongodb時候遇到的問題來講解。大家可以忽略這些細節,更關注用法!

問題1 是:我要同時查10筆操作,可是我們該如何操作

    
    
  
 //這是10筆要查的數據集合
    var array = [1,2,3,4,5,6,7,8,9,10];
    //這里大家使用自己的數據庫進行案例
    var model = mongoose.model("demo");
    Promise.all([array.map(i=>{
        return new Promise((resolve,reject)=>{
            resolve(demo(i))
        })
    })]).then(result=>{
        //獲得十筆查詢后的記錄
        console.log(result);
    })
    
    
    function demo(name){
        return model.find({name:name}).exec();
    }

問題2:我該如何使用混合同步并發執行先查詢圖片名字,然后記錄下來并且刪除這些圖片

//模擬查詢圖片
function queryImgs(){
    return new Promise((resolve,reject)=>{
    //返回查詢結果
        resolve(1);
    })
}
//模擬刪除圖片
function deleteImg(imgs){
    return new Promise((resolve,reject)=>{
            resolve(1);
        })
}
//模擬記錄圖片
function recordImg(imgs){
    return new Promise((resolve,reject)=>{
            resolve(1);
        })
}

function delAndRecord(imgs){
    return Promise.all([deleteImgs(imgs),recordImgs(imgs)]);
}

queryImgs().then(delAndRecord).then(result=>{
    console.log(result)
}).catch(err=>{
    console.log(err)
})

當然,我們這邊的deleteImgs和recordImgs都會繼續劃分,因為我們這里是并發的刪除,我們是用方法就是用問題一來解決這些所有的東西!

以上就是兩章內容,過幾天上第三章內容,基本上就解決所有可能遇到的問題了!以上這些方法足以解決上百同時的并發查詢!我指單個請求中包含的!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/18835.html

相關文章

  • 在非阻塞IOnodejs同步并行 ES6 promise 入門深入

    摘要:現在我們要用的重點就是我們的,這是一個能讓函數并行的,可以基于多個。非常有用啊先上一個錯誤的代碼這時候我們得到的就是數字了,而不是一個數組,這就是神奇所在。 看過 (一)的同學一定覺得這個Promise很簡單,好像沒什么可以用的地方,但是事實上,它的用處非常大啊,尤其是在nodejs上,愈加重要,雖然已經有大量的庫實現了對Promise的封裝了,不過我還是更傾向用原生的node來實現對...

    Jrain 評論0 收藏0
  • 在非阻塞IOnodejs同步并行 ES6 promise 入門深入(一)

    摘要:我們先介紹一下中的的一些調用再結合的應用逐步深入。這就是一些簡單的的調用看起來不多,但是靠這個真得解決了許多必須同步并行的環境本身是一個對象在開始支持。存在兩個回調函數根據個人的需求進行處理。 什么是promise?為什么要在nodejs中使用promise?使用promise到底有什么好處呢?實在太多了,一一說來不如直接上實戰。我們先介紹一下nodejs中的promise的一些調用....

    luffyZh 評論0 收藏0
  • “async”到async——Node異步流程控制總結

    摘要:面對著線程相關的問題,出現了協程。協程的特點在于是一個線程執行,因此最大的優勢就是協程極高的執行效率。因為子程序切換不是線程切換,而是由程序自身控制,因此,沒有線程切換的開銷,和多線程比,線程數量越多,協程的性能優勢就越明顯。 Node的異步概念 理解異步非阻塞 提到Node,異步非阻塞會是第一個需要你理解的概念。很多人會把這實際上是兩個概念的詞混為一談,認為異步就是非阻塞的,而同步就...

    AbnerMing 評論0 收藏0
  • Nodejs模塊加載與ES6模塊加載實現

    摘要:以后需要引用模塊的變量函數類就在這個模塊對象的取出,即使再次進來模塊也不會重新執行,只會從緩存獲取。所以對相同模塊的再次加載都是優先緩存方式,核心模塊的緩存檢查依然優先于文件模塊。內建模塊導出啟動會生成全局變量,提供方法協助加載內建模塊。 原始時代 作為一門語言的引入代碼方式,相較于其他如PHP的include和require,Ruby的require,Python的import機制,...

    陳江龍 評論0 收藏0
  • 精讀《你不知道javascript(中卷)》

    摘要:強制類型轉換本章介紹了的數據類型之間的轉換即強制類型轉換包括顯式和隱式。強制類型轉換常常為人詬病但實際上很多時候它們是非常有用的。隱式強制類型轉換則沒有那么明顯是其他操作的副作用。在處理強制類型轉換的時候要十分小心尤其是隱式強制類型轉換。 前言 《你不知道的 javascript》是一個前端學習必讀的系列,讓不求甚解的JavaScript開發者迎難而上,深入語言內部,弄清楚JavaSc...

    李世贊 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<