為了體驗promise的原理,我打算自己把ajax包裝成promise的形式。主要希望實現下列功能:
// 1.使用success和error進行鏈式呼叫,並且可以在後面加上無限個
promise.get(myurl).success(successcallback1).error(errorcallback1).success(successcallback2).error(errorcallback2).error(errorcallback3).success(successcallback3);
// 2.支援同時呼叫多個myurl,這個時候需要最後的http請求返回之後才執行**。
promise.get(myurl1).success(successcallback1).get(myurl2).error(errorcallback1).get(myurl3).error(errorcallback2).success(successcallback1);
// 3.支援post和jsonp請求。
對於ajax我選用jq的ajax,但是盡量不使用jq的deferred物件。
本篇博文實現功能2:多非同步情形。
在多非同步情形下,成功**和失敗**的處理方式有如下情況:
成功**接收所有引數,失敗**接收單一引數,只要失敗,成功**不執行,只執行相應失敗**。
成功**接收所有引數,失敗**接收單一引數,就算失敗,也執行成功**。
成功**接收所有引數,失敗**接收所有引數,就算失敗,也執行成功**。
等等。上面的情況都可以實現,但是只有情況1比較符合實際業務,所以我們只實現情況1.
實現的方法是:我們引入乙個哨兵變數,並且把返回的資料按順序儲存起來,用哨兵變數判斷出最後乙個成功返回後,表示資料全部返回,然後執行**函式。
**如下:
// 模擬ajax
let mockajax = () => else
});}let promise = function() ;
// 返回資料的結果集合
this.result = ;
// 哨兵變數
this.sum = 0;
this.count = 0;
};promise.prototype.success = function(cb) ;
promise.prototype.error = function(cb) ;
promise.prototype.get = function(url)
}// 初始化
that.result.length = 0;
that.sum = 0;
that.count = 0;}}
},error: function (err, status) }}
});});
return this;
}// test***************====
let successcallback = (message) => (result, status) => );
}let errorcallback = (message) => (err, status) =>
let testpromise = new promise();
testpromise.get('url1').success(successcallback(1)).success(successcallback(2)).error(errorcallback(1)).error(errorcallback(2)).get('url2').success(successcallback(3)).error(errorcallback(3)).get('url3');
測試輸出結果如下:
// 成功情況
url1get成功**1
url2get成功**1
url3get成功**1
url1get成功**2
url2get成功**2
url3get成功**2
url1get成功**3
url2get成功**3
url3get成功**3
// 失敗情況
url1get失敗**1
url1get失敗**2
url1get失敗**3
可以看到,成功情況,對返回的三個資料依次執行成功123;失敗情況,只對失敗的url1執行了失敗**123。 把SWT包裝成Plugin需要修改的地方
把乙個swt程式包裝到eclipse裡作為plugin執行很容易,但有以下幾點需要注意 1 eclipse的 pde tools convert projects to plug in projects 可生成plugin工程需要的檔案,注意原來在classpath裡對swt.jar的引用應改為ma...
手寫promise封裝ajax
其實,axios本身就是基於promise進行封裝的,我們之所以進行二次封裝,主要是為了能夠對錯誤資訊進行乙個集中的處理,根據不同的錯誤資訊,需要給使用者不同的提示,以便於給使用者乙個良好的操作體驗。封裝方法有很多種,基於class類的,基於建構函式的,也可以直接封裝乙個函式。具體按照個人習慣,最主...
promise配合ajax使用
目錄 原生ajax和promise的結合使用 ecmascript 6 原生提供了 promise 物件。promise 物件代表了未來將要發生的事件,用來傳遞非同步操作的訊息。物件的狀態不受外界影響。promise 物件代表乙個非同步操作,有三種狀態 promise物件是微任務!1.建立xmlht...