序文
この記事では、個人的な開発の後に要約に需要の結果であり、複数のアプリケーションに有利になるように偏った、約束のために、非同期ベースでは詳細には触れませ。多くは、インターネット上の記事を関連して、友人が見ることができる必要があり、少しの知識が理解しやすい読む前にお勧めします。
1.最初のホットパンツは、使用の基礎を-promise -機能シリアル非同期実行
事実を、でも約束を使用せずに実行される非同期関数の下にネストすることにより、非同期機能は、同じ効果を得ることができます。しかし、コードより柔軟でなく、より良いコードの可読性を使用することをお約束します。
/**1.promise基础用法**/
function test(index,waitTime) {
var p = new Promise(function(resolve,reject){
setTimeout(()=> {
console.log('test方法执行' + index);
resolve('promise返回数据' + index);
}, waitTime);
});
return p;
}
test(1,2000).then((data) => {
console.log(data);
return test(2,100);
}).then((data) => {
console.log(data);
});
結果
は保証シリアル実行、方法は前に2つを行う方法でなければなりません。
プロミス非同期2.内部ループ用途
多くの場合、そこに非同期イベントサイクルですが、我々は非同期イベントのリターンのすべてのサイクルを取得したい、後にメソッドを再実行してください:
PSは:ここアレイの実装に完成する予定Promise.all(配列)機能を、必要とします、だけにして実行
function promiseFunc(index) {
var p = new Promise((resolve,reject) => {
setTimeout(() => {
resultArr.push(index);
resolve();
},2500);
});
return p;
}
var resultArr = [];
var promiseArr = [];
for(var i = 0 ; i < 10 ; i++) {
promiseArr.push(promiseFunc(i));
}
Promise.all(promiseArr).then(() => {
console.log('最终结果' + resultArr);
});
結果
3.async、用法のawait
1.awaitは、それ以外の場合は、間違った構文で、関数の非同期内で宣言する必要があります。
2.非同期使用するので、約束は、対象となる主のawait非同期実行順序を制御するため、および非同期関数の戻りで、それは一般的に約束と一緒に推奨されます
栗のために - によって非同期/のawait、上記のサイクル非同期機能を達成するために
function promiseFunc2(index) {
var p = new Promise(function(resolve,reject){
setTimeout(()=> {
console.log('test2方法执行' + index);
resolve('promise2返回数据' + index);
}, 2000);
});
return p;
}
//async返回的是promise对象
async function demoAsyn() {
let res1 = await promiseFunc2(1);
let res2 = await promiseFunc2(2);
let res3 = await promiseFunc2(3);
return res1 + res2 + res3;
}
demoAsyn().then((res) => {
console.log(res);
});
結果