Promiseの個人的な理解
4089 ワード
ECMAscript 6原生はPromiseの対象を提供しました.
Promiseオブジェクトは、将来発生するイベントを表し、非同期操作のメッセージを伝達する.
Promiseの特徴:
1、対象の状態は外部の影響を受けない.Promiseオブジェクトは非同期操作を表しています.3つの状態があります.ペンディング:初期状態は成功や失敗の状態ではありません. fulfilled:操作が成功したことを意味する. rejeced:操作が失敗したことを意味します. 非同期操作の結果のみ、現在の状態はどの状態かを決定できます.他の操作はこの状態を変えることができません.これもPromiseという名前の由来ですが、英語では「承諾」という意味で、他の手段は変えられないという意味です.
2、一旦状態が変わったら、二度と変わらない.いつでもこの結果を得ることができる.Promiseオブジェクトの状態が変わるのは、PendingからReolvedに変化することとPendingからRejectiedに変化することしかできません.この二つの状況が発生すれば、状態が固まり、これ以上変わることなく、ずっとこの結果を維持します.変更が発生したとしても、Promiseオブジェクトに対してコールバック関数を追加すると、すぐにこの結果が得られます.イベントとは全く違って、イベントの特徴は、それを見逃してしまったら、また傍聴しても結果が得られないということです.
簡単なpromiseの例
例
Promiseオブジェクトは、将来発生するイベントを表し、非同期操作のメッセージを伝達する.
Promiseの特徴:
1、対象の状態は外部の影響を受けない.Promiseオブジェクトは非同期操作を表しています.3つの状態があります.
2、一旦状態が変わったら、二度と変わらない.いつでもこの結果を得ることができる.Promiseオブジェクトの状態が変わるのは、PendingからReolvedに変化することとPendingからRejectiedに変化することしかできません.この二つの状況が発生すれば、状態が固まり、これ以上変わることなく、ずっとこの結果を維持します.変更が発生したとしても、Promiseオブジェクトに対してコールバック関数を追加すると、すぐにこの結果が得られます.イベントとは全く違って、イベントの特徴は、それを見逃してしまったら、また傍聴しても結果が得られないということです.
簡単なpromiseの例
let promiser = new Promise((resolve, reject) => {
resolve(0)
})
promiser.then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
//resolve=====> .then()
//rejected======> .catch()
0
Promiseのチェーン呼び出し例
//
function promise1(status){
return new Promise((resolve, reject) => {
if(status) {
console.log(' 1 promise ');
resolve(' 1 promise '); // axios
}
if(!status) {
console.log(' 1 promise ');
reject(' 1 promise ')
}
})
}
function promise2(status){
return new Promise((resolve, reject) => {
if(status) {
console.log(' 2 promise ');
resolve(' 2 promise ')
}
if(!status) {
console.log(' 2 promise ');
reject(' 2 promise ')
}
})
}
function promise3(status){
return new Promise((resolve, reject) => {
if(status) {
console.log(' 3 promise ');
resolve(' 3 promise ')
}
if(!status) {
console.log(' 3 promise ');
reject(' 3 promise ')
}
})
}
function promise4(status){
return new Promise((resolve, reject) => {
if(status) {
console.log(' 4 promise ');
resolve(' 4 promise ')
}
if(!status) {
console.log(' 4 promise ');
reject(' 4 promise ')
}
})
}
promise1(true)
.then(response => { // 1
console.log(response)
// , 2 promise
return promise2(true) // return , return .then() , .then(response) response Undefined, .then() return promise
})
.then(response => { // 2
console.log(response)
return promise4(true)
})
.then(response => {
console.log(response)
})
.catch(error => {
console.log(error)
})
all方法の例 // all , promise ( resolve), then , (reject) , catch
Promise.all([promise1(true), promise2(true), promise3(true)]).then(response => {
console.log(' ');
}).catch(error => {
console.log(' ');
})
race方法の例// race , , resolve( ), 。
// :rece, resolve, , then。 , reject,
Promise.race([promise1(false), promise2(true), promise3(true)]).then(response => {
console.log(' ');
}).catch(error => {
console.log(' ');
})