Promise結合async和await的使用


Promise結合async和await的使用

例如我們用 node.js fs 模塊依次打開六個 TXT 文件。

 1 const fs = require("fs");
 2  3 fs.readFile("./1.txt",function(err,data){
 4     console.log(data.toString());
 5     fs.readFile("./2.txt",function(err,data){
 6         console.log(data.toString());
 7         fs.readFile("./3.txt",function(err,data){
 8             console.log(data.toString());
 9             fs.readFile("./4.txt",function(err,data){
10                 console.log(data.toString());
11                 fs.readFile("./5.txt",function(err,data){
12                     console.log(data.toString());
13                     fs.readFile("./6.txt",function(err,data){
14                         console.log(data.toString());
15                     });
16                 });
17             });
18         });
19     });
20 });

 

 

此時就會陷入會點地獄代碼畢竟是給人看的,但上面的代碼,結構松散,難於讀取。

 

如果直接使用Promise 改寫

 

 1 const fs = require("fs");
 2  3 function read(url){
 4     return new Promise(function(resolve,reject){
 5         fs.readFile(`./${url}.txt`,function(err,data){
 6             if(err)return;
 7             resolve(data.toString());//專成字符串格式
 8         });
 9     });
10 }
11 read(1).then(function(data){//聲明為先執行第一個然后在執行后面的
12     console.log(data);
13     read(2).then(function(data){//聲明為先執行第一個然后在執行后面的
14         console.log(data);
15         read(3).then(function(data){//聲明為先執行第一個然后在執行后面的
16             console.log(data);
17             read(4).then(function(data){//....
18                 console.log(data);
19                 read(5).then(function(data){
20                     console.log(data);
21                     read(6).then(function(data){
22                         console.log(data);
23                     });
24                 });
25             });
26         });
27     });
28 });
29  

 

這並沒發揮出 Promise 作為語法糖的作用。所以如果是單純異步回調改寫成 promise 是沒啥大區別。打敗了回調黑洞進入鏈式黑洞。但是結合async 和 await 就大不一樣了。

結合async 和 await 再次改寫

 

const fs = require("fs");
​
function read(url){//此函數實現讀取傳來的url為地址的文件
    return new Promise(function(resolve,reject){
        fs.readFile(`./${url}.txt`,function(err,data){
            if(err)return;
            resolve(data.toString());
        });
    });
}
async function main(){
    var data1 = await read(1);//讀取
    console.log(data1);//輸出
    var data2 = await read(2);
    console.log(data2);
    var data3 = await read(3);
    console.log(data3);
    var data4 = await read(4);
    console.log(data4);
    var data5 = await read(5);
    console.log(data5);
    var data6 = await read(6);
    console.log(data6);
}
main();

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM