私たちは、最初の約束は何で、知って来なければなりません
公式:いわゆるPromise
、それは単にイベントが将来(通常は非同期動作)の結果にいつか終わる保持するコンテナです。構文的には、約束がオブジェクトである、あなたはそれの非同期操作からメッセージを取得することができます。統一されたAPIを提供することを約束は、非同期操作の様々な同じように扱うことができます。
サウンドは、霧、我々は最初にそれが同期されているものを理解しています。
同期は、関数呼び出しの後を含め、実行終了を一つのタスクを実行し、次のタスクに結果を返しています。このタスクの実行時間は、無限ループとして、非常に長い場合、それが実行を終了することができなかった、それは長い時間または永久のために非常に長い時間を待たなければならない、これは、スレッドブロックです。
だから、ブロックしないようにするために、我々は非同期にする必要があります。
非同期は複数のタスクを同時に実行することであるタスクのニーズを待機させる場合の結果は、コールバック関数の直後に返されません終了し、ネストされたリクエストの層がA Aを実行していきますまで、それは、具体的には、最初の実行Bだろう,,私たちは約束を使用する場合、それは非常に複雑になるネスティング、されている必要があり、AJAXだけで、それは非常に簡単に読むためになり、コードを書き換えると組み合わせることができます。
書き換え前:
request('test1.html', '', function(data1) { console.log('第一次请求成功, 这是返回的数据:', data1); request('test2.html', data1, function (data2) { console.log('第二次请求成功, 这是返回的数据:', data2); request('test3.html', data2, function (data3) { console.log('第三次请求成功, 这是返回的数据:', data3); //request... 继续请求 }, function(error3) { console.log('第三次请求失败, 这是失败信息:', error3); }); }, function(error2) { console.log('第二次请求失败, 这是失败信息:', error2); }); }, function(error1) { console.log('第一次请求失败, 这是失败信息:', error1); });
改写以后:
sendRequest('test1.html', '').then(function(data1) { console.log('第一次请求成功, 这是返回的数据:', data1); return sendRequest('test2.html', data1); }).then(function(data2) { console.log('第二次请求成功, 这是返回的数据:', data2); return sendRequest('test3.html', data2); }).then(function(data3) { console.log('第三次请求成功, 这是返回的数据:', data3); }).catch(function(error) { //用catch捕捉前面的错误 console.log('sorry, 请求失败了, 这是失败信息:', error); });
注意:Promise
一旦新建就会「立即执行」,无法取消。这也是它的缺点之一。
再举个简单的栗子:
let a = 1;
let p1 = new promise(function(resolve,reject){
if(a == 1){
resolve("成功啦!");
}else{
reject("失败啦!");
}
})
p1.then(res=>{
console.log(res);
},err=>{
console.log(err);
})