記事ディレクトリ
Promise は非同期操作のメッセージを配信するために使用され、Promise オブジェクトは非同期操作を表します。
特徴
1. Promise オブジェクトの状態は外部の影響を受けません。つまり、非同期操作の結果のみがその状態を変更でき、他の操作はこの状態を変更できません。合計で 3 つの状態があります。
- 保留中 (待機中): 成功または失敗の状態ではなく、初期状態です。
- 満たされました: 操作が正常に完了したことを意味します。
- 拒否 (拒否): 操作が失敗したことを意味します。
2.状態を変更できる可能性は 2 つだけです: 保留中→履行および保留中→拒否; 状態が一度変更されると、再度変更されることはありません。
作成する
Promise オブジェクトを作成するには、 new を使用して Promise コンストラクターを呼び出してインスタンス化します。
var promise = new Promise(function(resolve, reject) {
// 异步处理
// 处理结束后、调用resolve 或 reject
});
Promise コンストラクターは 1 つのパラメーターと、2 つのパラメーターの解決 (解決) と拒否 (拒否) を持つコールバックを受け取ります。コールバックで何か (async など) を実行し、すべてが OK であれば、resolve を呼び出し、そうでない場合は、reject を呼び出します。
実際の例を見てみるとよくわかります。
実践例
function get(url, params = {
}) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: params
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err)
})
})
}
ここでは、最初に Promise オブジェクトを構築し、axios を使用してバックグラウンド情報にアクセスする非同期メソッドを使用します。axios.get メソッドは、アクセスに成功する (通常の情報を返す) 場合もあれば、アクセスに失敗する (例外情報を返す) 場合もあります。このとき、成功でも失敗でも情報を渡したいので、アクセスが成功した場合はresolveメソッドを使って成功の情報を渡し、アクセスが失敗した場合はrejectメソッドを使って情報を渡します。失敗した情報を外に出します。これら 2 つのメソッドで受け入れられるパラメータには、任意の値を指定できます (もちろん、パラメータを渡さないこともできます)。
インスタンス化された Promise オブジェクトに対して Promise.then() メソッドを呼び出すことができ、resolve メソッドと Reject メソッドがコールバックとして渡されます。
promise.then() は、promise の最も一般的に使用されるメソッドです。
promise.then(onFulfilled, onRejected)
Promise はエラーの処理を簡素化するため、上記のコードを次のように記述することもできます。
promise.then(onFulfilled).catch(onRejected)
次のステップでは、get メソッドを呼び出します。
get(xxxx,{
})
.then(result => {
do something })
.catch(err=> {
do something });
ここで、get メソッドを呼び出すと Promise オブジェクトが取得され、then メソッドが呼び出されます。結果は、resolve(response.data) で渡されたresponse.data です。また、catch メソッドを呼び出すと、err は、reject(err) で渡された err になります。 )。
Promise.resolve方法,Promise.reject方法
既存のオブジェクトを Promise オブジェクトに変換するには、Promise.resolve メソッドまたは Promise.reject メソッドを使用できます。
Promise.resolve('fyk').then(function(value){
console.log(value); // 打印出fyk
});
solve によって変換された Promise オブジェクトは、直接に満たされた (完了した) 状態に入ります。
Promise.reject('fyk').catch(function(error){
console.log(error);// 打印出fyk
});
拒否によって変換された Promise オブジェクトは、直接拒否 (拒否) 状態になります。