概要
約束は、非同期JavaScriptプログラミングコードを記述するために使用されます。ここでは最も簡単で安価の例です
// 定外卖就是一个Promise,Promist的意思就是承诺
// 我们定完外卖,饭不会立即到我们手中
// 这时候我们和商家就要达成一个承诺
// 在未来,不管饭是做好了还是烧糊了,都会给我们一个答复
function 定外卖(){
// Promise 接受两个参数
// resolve: 异步事件成功时调用(菜烧好了)
// reject: 异步事件失败时调用(菜烧糊了)
return new Promise((resolve, reject) => {
let result = 做饭()
// 下面商家给出承诺,不管烧没烧好,都会告诉你
if (result == '菜烧好了')
// 商家给出了反馈
resolve('我们的外卖正在给您派送了')
else
reject('不好意思,我们菜烧糊了,您再等一会')
})
}
// 商家厨房做饭,模拟概率事件
function 做饭() {
return Math.random() > 0.5 ? '菜烧好了' : '菜烧糊了'
}
// 你在家上饿了么定外卖
// 有一半的概率会把你的饭烧糊了
// 好在有承诺,他还是会告诉你
定外卖()
// 菜烧好执行,返回'我们的外卖正在给您派送了',这里then是可以有多个的
.then(res => console.log(res))
// 菜烧糊了执行,返回'不好意思,我们菜烧糊了,您再等一会'
.catch(res => console.log(res))
どのような使用2つの約束
メインプロセス及びフォローアッププロセスを、メインの手順は、後続の実装プロセスをトリガー、正常に実行された後に:私たちは通常、JSを書くときに非同期タスクは2つの部分に分割されます、コールバック関数を最初に起動します。たとえば、多くの場合、あなたは、データを正常に取得した後に、サーバーへの実際のプログラミングデータ要求にAJAXを使用したデータの処理を開始する必要があります。そして取得部コードデータは次のように、データ処理部に分けられます。
getData((data) => {
// 处理data
})
今、複数の非同期タスクがある、との依存関係がそのように、タスク間のコールバックのコードを書く(タスクが実行を開始することができます別のタスクの成功後の結果を得るために必要)があることを前提としています以下のような地獄で、この補正:
getData1(data1 => {
getData2(data1, data2 => {
getData3(data2, data3 => {
getData4(data3, data4 => {
getData5(data4, data5 => {
// 终于取到data5了
})
})
})
})
})
私たちは書くことができます約束します:
// 然后
getData1()
.then(getData2)
.then(getData3)
.then(getData4)
.then(getData5)
.then(data => {
// 取到最终data了
})
3つの約束を使用してください
1.三つの状態
- 保留(TBD)
- 成就(実行)
- 拒否(拒否)
成就と拒否され成功していると言われ、失敗したことができ、これらの2つの状態が完成した状態として戻ってきました