Promise複数リクエスト、finally、チェーンコール学習
30356 ワード
文書ディレクトリ記事参照 基本構文 キャプチャ異常処理 チェーンコール promiseのfinallyメソッド アプリケーションシーン 非同期アプリケーションシーン使用説明 両要求には必然的な関係はなく、それぞれコールバックを実行すれば である.両リクエストには先着順があり、必ずOneを先にリクエストしてからTwo を使用します.以上のリクエストは成功したが、リクエスト間には関係ない 複数の要求は1つの成功だけで論理処理 を行う. axios複数の非同期要求がすべて成功する後に処理されるトラフィック要求パッケージ .使用例 記事リファレンスチェン一峰ES 6 promise vue実力パッケージaxios 基本構文
初期のブラウザ互換性:PromiseオブジェクトはES 6の内容で、babelを使用して変換することができます.基本的な構文は以下の通りです.
キャプチャ例外処理
チェーンコール
リファレンスhttps://segmentfault.com/a/1190000007598894リファレンスhttp://es6.ruanyifeng.com/#docs/promise#Promise-prototype-then
チェーン式thenを使用すると、順序に従って呼び出されるコールバック関数のセットを指定できます.この場合、前のコールバック関数は、まだPromiseオブジェクト(すなわち非同期操作)を返す可能性があります.この場合、後のコールバック関数は、そのPromiseオブジェクトの状態が変化するのを待って呼び出されます.
上のコードは最終的に出力されます:result of start:start result of p 1:1 ex:2 result of p 4:4
promiseのfinallyメソッド
参考promise-finally学習
シーンの適用
非同期適用シーンの使用方法の説明
2つのリクエストには必然的な関係はありません.それぞれコールバックを実行すればいいです.
2つのリクエストには先着順がありますので、必ずOneをリクエストしてからTwoを使います
複数のリクエストは成功しましたが、リクエスト間は関係ありません.
複数のリクエストは1つの成功だけで論理処理されます
axios複数の非同期リクエストがすべて成功した後に処理されるビジネスリクエストパッケージ
使用例
初期のブラウザ互換性:PromiseオブジェクトはES 6の内容で、babelを使用して変換することができます.基本的な構文は以下の通りです.
var promise = new Promise(function(resolve, reject) {
// ... some code
if (/* */){
resolve(value);
} else {
reject(error);
}
});
//then resolved , ( ) rejected 。
promise.then(function funcA(comments) {
console.log("resolved: ", comments);
}, function funcB(err){
console.log("rejected: ", err);
});
キャプチャ例外処理
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error);
});
チェーンコール
リファレンスhttps://segmentfault.com/a/1190000007598894リファレンスhttp://es6.ruanyifeng.com/#docs/promise#Promise-prototype-then
チェーン式thenを使用すると、順序に従って呼び出されるコールバック関数のセットを指定できます.この場合、前のコールバック関数は、まだPromiseオブジェクト(すなわち非同期操作)を返す可能性があります.この場合、後のコールバック関数は、そのPromiseオブジェクトの状態が変化するのを待って呼び出されます.
function start() {
return new Promise((resolve, reject) => {
resolve('start');
});
}
start()
.then(data => {
// promise start
console.log('result of start: ', data);
return Promise.resolve(1); // p1
})
.then(data => {
// promise p1
console.log('result of p1: ', data);
return Promise.reject(2); // p2
})
.then(data => {
// promise p2
console.log('result of p2: ', data);
return Promise.resolve(3); // p3
})
.catch(ex => {
// promise p3
console.log('ex: ', ex);
return Promise.resolve(4); // p4
})
.then(data => {
// promise p4
console.log('result of p4: ', data);
});
上のコードは最終的に出力されます:result of start:start result of p 1:1 ex:2 result of p 4:4
promiseのfinallyメソッド
参考promise-finally学習
シーンの適用
app , , ‘ ’ , , loading ,
.しかし、リクエストは成功、失敗、タイムアウトがあり、システム全体の正常な使用に影響を与えないために、プロンプトボックスを強制的に閉じる必要があり、promiseのfinallyを利用してプロンプトボックスを閉じる必要があります.var promise = new Promise(function(resolve, reject) {
console.log("promise")
window.setTimeout(function(){
if (false){
resolve('huangbiao');
} else {
debugger
reject('error');
}
},1000)
}).then(function(){
console.log('success');
}).catch(function(){
console.log('catch');
}).finally(function(){
console.log('finally');
});
promise , then catch , finally 。
非同期適用シーンの使用方法の説明
2つのリクエストには必然的な関係はありません.それぞれコールバックを実行すればいいです.
var promiseOne = axios.get('http://first').then(function(resOne) {
// One ,
// setState(resOne)
})
var promiseTwo = axios.get('http://second').then(function(resTwo) {
// Two
// setState(resTwo)
})
2つのリクエストには先着順がありますので、必ずOneをリクエストしてからTwoを使います
var promiseOne = axios.get('http://first').then(function(resOne) {
// One ,
// setState(resOne)
var promiseTwo = axios.get('http://second').then(function(resTwo) {
// Two
// setState(resTwo)
})
})
var promiseTwo = axios.get('http://second').then(function(resTwo) {
// Two
// setState(resTwo)
var promiseOne = axios.get('http://first').then(function(resOne) {
// One ,
// setState(resOne)
setState(resTwo+resOne)
})
})
複数のリクエストは成功しましたが、リクエスト間は関係ありません.
const p = Promise.all([p1, p2, p3]).then(function () {
Three = One + Two
})
複数のリクエストは1つの成功だけで論理処理されます
const p = Promise.race([p1, p2, p3]);
axios複数の非同期リクエストがすべて成功した後に処理されるビジネスリクエストパッケージ
/**
* promise , ,
* */
allPromise: function(promise1,promise2){
//
var userPromise = Array.prototype.slice.apply(arguments);
console.dir(userPromise);
//
debugger
var promiseObj = new Promise(function(resolve, reject){
axios.all(userPromise).then(axios.spread(function () {
resolve(arguments);
}),function(){
reject(arguments);
});
});
return promiseObj;
},
使用例
//
var getorgInfoPromise = getData.getRestful("getWarehousesByFacotryid", {id: whOrgId});
//
var queryParam = {
status: nodeObj.status,
whOrgId: whOrgId
}
// ID
var getWarehousesByFacotryidPromise = getData.postRestful("searchWarehouseInfo", {
pageSize: pageSize,
pageNum: current
}, queryParam);
//
getData.allPromise(getorgInfoPromise, getWarehousesByFacotryidPromise).then(function (responseObj) {
var getorgInfoPromiseRes = responseObj[0];
var getWarehousesByFacotryidPromiseRes = responseObj[1];
// 0
if (getorgInfoPromiseRes.data.resultCode == 0 && getWarehousesByFacotryidPromiseRes.data.resultCode == 0) {
var treeInfo = {
//
type: "org",
//
listInfo: getWarehousesByFacotryidPromiseRes.data,
//
detailInfo: getorgInfoPromiseRes.data
}
that.totalNum = getWarehousesByFacotryidPromiseRes.data.totalNum;
that.treeClickAction(treeInfo);
}
});