ECMAscript 6は、Promiseオブジェクトをネイティブに提供します。
約束する
Promiseオブジェクトは、将来発生するイベントを表し、非同期操作メッセージの送信に使用されます。これは、非同期操作処理メカニズムのセットです。
Promiseオブジェクトは、ネストされたコールバック地獄の問題を解決します。
解決された状態と拒否された状態のコールバック関数は、それぞれthenメソッドを介して定式化されます。
1.約束の機能
- ネストされたコールバック関数を回避して、一連の非同期操作でエラーを柔軟に処理できます。
約束にはいくつかの欠点もあります。まず、Promiseはキャンセルできません。一度作成するとすぐに実行され、途中でキャンセルすることはできません。次に、コールバック関数が設定されていない場合、Promise内でスローされたエラーは外部に反映されません。第3に、保留状態の場合、現在どの段階にあるか(開始したばかりか、完了しようとしている)を知ることはできません。
第二に、約束の作成
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 调用resolve */){
resolve(value);
} else {
/* 异步操作失败 调用reject */
reject(error);
}
});
resolve:非同期操作が成功したときに呼び出され、非同期操作の結果をパラメーターとして渡します。
拒否:非同期操作が失敗したときに呼び出され、非同期操作によって報告されたエラーがパラメーターとして渡されます。
三、Promise.prototype.then()
約束のインスタンスが生成された後、あなたが使用することができ、その後(そのメソッドがプロトタイプオブジェクトに定義されている方法をPromise.prototype。その役割をすることで、コールバック関数を追加するための約束の時に状態が変化する場合。)、漁獲方法を指定解決済み状態と拒否済み状態それぞれコールバック:
ew Promise(function(resolve,reject) {
let num = Math.random() * 2;
console.log("产生的随机数为:" + num);
setTimeout(function () {
if(num < 1) {
console.log("执行成功");
resolve("200 OK");
} else {
console.log("执行失败");
reject("失败原因num为:" + num);
}
}, num * 1000);
}).then(function(r) {
console.log("then:" + r);
}).catch(function(j) {
console.log("catch:" + j);
});
四、Promise.prototype.catch()
Promise.prototype.catch()メソッドは、エラーが発生したときのコールバック関数を指定するために使用されます。
const p1 = new Promise(function cb(resolve, reject) {
setTimeout(() => {
console.log('欢迎')
reject()
}, 3000)
})
p1.then(_ => {
setTimeout(() => {
console.log('谢谢光临')
}, 2000)
}).catch(_ => {
console.log('出错了')
})
promiseがエラーをスローすると、catch()メソッドで指定されたコールバック関数によってキャッチされます。
Promiseステータスが解決された場合、エラーを再度スローすることは無効です。
五、Promise.prototype.finally()
finish()メソッドはPromiseを返します。
約束の終わりに、結果が満たされるか拒否されるかにかかわらず、指定されたコールバック関数が実行されます。これは、Promiseが正常に完了した後に実行する必要があるコードの方法を提供します。
これにより、** then()とcatch()**で同じステートメントを1回記述する必要がある状況を回避できます。
p.finally(onFinally);
p.finally(function() {
// 返回状态为(resolved 或 rejected)
});
パラメータ:
- onFinally
- Promiseの終了後に呼び出される関数。
戻り値:
- finallyコールバック関数を使用してPromiseオブジェクトを返します。
六、Promise.all()
Promise.all(iterable)メソッドはインスタンスを返します。このインスタンスでは、iterableパラメーターのすべてのpromiseが「解決」されるか、パラメーターにpromiseが含まれていない場合、コールバックが完了(解決)されます。パラメータが失敗(拒否)このインスタンスコールバックが失敗(拒否)しました。失敗の理由は、最初に失敗したpromiseの結果です。
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
参照ボス:https://blog.csdn.net/m0_46532221/article/details/106528918