Promise解决异步操作问题
生活随笔
收集整理的這篇文章主要介紹了
Promise解决异步操作问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:
當有多個回調函數后,就無法保證其輸出的順序性了,而采用嵌套的方式雖可以解決這個問題,但是代碼樣式太丑,且很亂,Promise的出現就是為了解決這個問題
多個回調函數
var fs = require('fs');fs.readFile('./files/1.txt','utf8',function(err,data){if(err){throw err;}console.log(data);})fs.readFile('./files/2.txt','utf8',function(err,data){if(err){throw err;}console.log(data);})fs.readFile('./files/3.txt','utf8',function(err,data){if(err){throw err;}console.log(data);})嵌套
fs.readFile('./files/1.txt','utf8',function(err,data){if(err){throw err;}console.log(data);//讀取第二個異步任務fs.readFile('./files/2.txt','utf8',function(err,data){console.log(data);//讀取第三個異步任務fs.readFile('./files/3.txt','utf8',function(err,data){console.log(data);})}) })起步
在 new Promise()容器放入回調函數
//語法:new Promise(function(callback){}) var fs = require('fs'); var promise = new Promise(function(resolve,reject){//兩個參數 resolve 異步執行成功的回調函數,reject異步執行失敗的回調函數fs.readFile('./files/1.txt', 'utf8', function (err, data) {if (err) {throw err;}console.log(data);}) });基本使用
在 new Promise()容器放入回調函數后,通過resolve將參數里的值帶出來
then里面的參數data就是resolve()括號里的值
(簡化起見,不寫err)
封裝
一層封裝
var fs = require('fs');function getFile(path){ return new Promise(function (resolve) {fs.readFile(path, 'utf8', function (err, data) {resolve(data);}) }); }getFile('./files/1.txt').then(function (data) {console.log('成功:' + data) })對于代碼重復的回調函數可以鏈式使用.then封裝,如下
var fs = require('fs');function getFile(path){ return new Promise(function (resolve) {fs.readFile(path, 'utf8', function (err, data) {resolve(data);}) }); }getFile('./files/1.txt') .then(function (data) {console.log('====>' + data)return getFile('./files/2.txt') }) .then(function(data){console.log('====>' + data)return getFile('./files/3.txt') }) .then(function(data){console.log('====>' + data) })執行多次異步操作
var promise1 = getFileByPath('./files/1.txt'); var promise2 = getFileByPath('./files/2.txt'); var promise3 = getFileByPath('./files/3.txt');Promise.all([promise3,promise1,promise2]).then(function(data){console.log(data); },function(err){console.log(err); })總結
以上是生活随笔為你收集整理的Promise解决异步操作问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逆水寒电脑配置需要多少?
- 下一篇: Js如何判断undefined和null