日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Promise的用简要使用方式

發布時間:2024/10/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Promise的用简要使用方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Promise用法

在項目中用到異步請求ajax,想到用promise來解決,之前用過但是已經很久了,還是忘了一些,重新熟悉了一下整理一份簡要文檔。

Promise,就是一個對象,用來傳遞異步操作的消息

Promise 對象代表一個異步操作,有三種狀態:Pending(進行中)、Resolved(已完成,又稱 Fulfilled)和 Rejected(已失敗)。

如果異步操作成功,則用 resolve 方法將 Promise 對象的狀態,從「未完成」變為「成功」(即從 pending 變為 resolved);

如果異步操作失敗,則用 reject 方法將 Promise 對象的狀態,從「未完成」變為「失敗」(即從 pending 變為 rejected)。

var promise = new Promise(function(resolve, reject) { if (/* 異步操作成功 */){ resolve(value); } else { reject(error); } });promise.then(function(value) { // success }, function(value) { // failure });

可以簡要看看promise的源碼

var Promise = function() {this.doneList = [];this.failList = [];this.state = 'pending'; };Promise.prototype = {//幾種常用方法constructor: 'Promise',resolve: function() {this.state = 'resolved';var list = this.doneList;for(var i = 0, len = list.length; i < len; i++) {list[0].call(this);list.shift();}},reject: function() {this.state = 'rejected';var list = this.failList;for(var i = 0, len = list.length; i < len; i++){list[0].call(this);list.shift();}},done: function(func) {if(typeof func === 'function') {this.doneList.push(func);}return this;},fail: function(func) {if(typeof func === 'function') {this.failList.push(func);}return this;},then: function(doneFn, failFn) {this.done(doneFn).fail(failFn);return this;},always: function(fn) {this.done(fn).fail(fn);return this;} };function when() {var p = new Promise();var success = true;var len = arguments.length;for(var i = 0; i < len; i++) {if(!(arguments[i] instanceof Promise)) {return false;}else {arguments[i].always(function() {if(this.state != 'resolved'){success = false;}len--;if(len == 0) {success ? p.resolve() : p.reject();}});}}return p;}

業務中的代碼實現方式如下:在兩次異步請求成功之后,再調用then的方法

return (dispatch, getState)=> {let getDataFunc = function(data) {return new Promise(function(resolve, reject){if(!data) {return resolve(null);}return requestJsonp({url: '',data: data,}, json=>{resolve(json);}, err=>{resolve(null);});});};return Promise.all([getDataFunc(data), getDataFunc(compareData)]).then((json)=>{if(!json[0] && !json[1]) {dispatch({type: DATA_ERR});} else {dispatch({type: REFRESH_GRAPH,data: json});}}); }; 現今流行的各大js庫,幾乎都不同程度的實現了Promise,如dojo,jQuery、Zepto等,它們暴露出來的大都是Deferred對象,以jQuery(Zepto類似)為例:方法更加簡潔方便 function getImg(url) { var def = $.Deferred(); var img = new Image(); img.onload = function() { def.resolve(this); }; img.onerror = function(err) { def.reject(err); }; img.src = url; return def.promise(); };

推薦一部書 promise迷你書,很薄的一本,?

http://liubin.org/promises-book/javascript-promise-book.pdf

轉載于:https://www.cnblogs.com/yinsu12311/p/5806713.html

總結

以上是生活随笔為你收集整理的Promise的用简要使用方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。