内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

在Promise鏈中共享變量的方法-創(chuàng)新互聯(lián)

怎么在Promise鏈中共享變量?其實要解決這個問題也不難,為此小編總結(jié)了這篇文章,下面我們一起來看看在Promise鏈中共享變量的方法。

創(chuàng)新互聯(lián)是一家專業(yè)從事成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司。作為專業(yè)的建站公司,創(chuàng)新互聯(lián)依托的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣及網(wǎng)站設(shè)計開發(fā)服務(wù)!

問題

connection變量在A處定義,在BC處都需要使用。但是,由于A、B、C處于各自獨立的作用域,connection變量將不能在BC處直接使用。

db.open()
   .then(connection => // A
   { 
     return connection.select(
     {
       name: 'Fundebug'
     });
   })
   .then(result =>
   {
     connection.query(); // B
   })
   .catch(error =>
   {
     // ...
   })
   .finally(() =>
   {
     connection.close(); // C
   });

方法1:使用高階作用域變量

在更高階的作用域定義connection變量,在D處賦值,這樣在BC處直接使用了。

let connection; // A
db.open()
   .then(conn =>
   {
     connection = conn; // D
     return connection.select(
     {
       name: 'Fundebug'
     });
   })
   .then(result =>
   {
     connection.query(); // B
   })
   .catch(error =>
   {
     // ...
   })
   .finally(() =>
   {
     connection.close(); // C
   });

問題:如果需要共享的變量過多(這是很常見的情況),則需要在高階作用域中定義很多變量,這樣非常麻煩,代碼也比較冗余。

方法2:嵌套作用域

將需要使用connection變量的Promise鏈內(nèi)嵌到對應(yīng)then回調(diào)函數(shù)中,這樣在BC處直接使用了。

db.open()
   .then(connection => // A
     {
       return connection.select(
         {
           name: 'Fundebug'
         })
         .then(result =>
         {
           connection.query(); // B
         })
         .catch(error =>
         {
           // ...
         })
         .finally(() =>
         {
           connection.close(); // C
         });
     });

問題:之所以使用Promise,就是為了避免回調(diào)地域,將多層嵌套的回調(diào)函數(shù)轉(zhuǎn)化為鏈?zhǔn)降膖hen調(diào)用;如果為了共享變量采用嵌套寫法,則要Promise有何用?

方法3:return多個值

intermediate變量在A處定義并賦值,而在B處需要使用;但是,由于AB處于不同的作用域,B出并不能直接使用intermediate變量:

return asyncFunc1()
   .then(result1 =>
   { 
     const intermediate = ··· ; // A
     return asyncFunc2();
   })
   .then(result2 =>
   { 
     console.log(intermediate); // B
   });

A處使用Promise.all返回多個值,就可以將intermediate變量的值傳遞到B處:

return asyncFunc1()
   .then(result1 =>
   {
     const intermediate = ···; 
     return Promise.all([asyncFunc2(), intermediate]); // A
   })
   .then(([result2, intermediate]) =>
   {
     console.log(intermediate); // B
   });

問題:  使用Promise.all用于傳遞共享變量,看似巧妙,但是有點大材小用,并不合理;不能將變量傳遞到.catch()finally()中;當(dāng)共享變量過多,或者需要跨過數(shù)個.then(),需要return的值會很多。

方法4: 使用Async/Await

Async/Await是寫異步代碼的新方式,可以替代Promise,它使得異步代碼看起來像同步代碼,可以將多個異步操作寫在同一個作用域中,這樣就不存在傳遞共享變量的問題了?。?!

方法1中的示例可以改寫為:

try
{
   var connection = await db.open(); // A 
   const result = await connection.select(
   {
     name: 'Fundebug'
   });
   connection.query(); // B
}
catch (error)
{
   // ...
}
finally
{
   connection.close(); // C
}

方法3中的示例可以改寫為:

try
{
   result1 = await asyncFunc1();
   const intermediate = ··· ;
   result2 = await asyncFunc2();
   console.log(intermediate);
}
catch (error)
{
   // ...
}

毋庸贅言,Async/Await直接將問題消滅了。

看完這篇文章,你們學(xué)會在Promise鏈中共享變量的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:在Promise鏈中共享變量的方法-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.rwnh.cn/article36/igspg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、商城網(wǎng)站用戶體驗、微信小程序網(wǎng)站制作、服務(wù)器托管

廣告

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

微信小程序開發(fā)
济阳县| 乡宁县| 旬邑县| 松阳县| 石台县| 札达县| 凉城县| 南康市| 儋州市| 黄冈市| 乌鲁木齐市| 日喀则市| 哈巴河县| 文化| 五峰| 德兴市| 隆安县| 灵寿县| 嵩明县| 武冈市| 浙江省| 邵东县| 加查县| 海宁市| 大洼县| 谢通门县| 新干县| 韶关市| 陈巴尔虎旗| 高平市| 阳曲县| 英超| 临邑县| 文水县| 巩义市| 铁岭市| 图木舒克市| 琼结县| 栾城县| 沾化县| 当雄县|