私がここウードルズ テクノロジーズで働いて学んだことを共有させてください。例を挙げてみましょう。
functionCall、doSomeworkOne、doSomeworkTwo、doSomeworkTwoの4 つの関数があり、いくつかの IO タスクを実行しているとします。
関数 doSomeworkThree functionCall は doSomeworkOne に依存し、doSomeworkOne は doSomeworkTwo に依存し、doSomeworkTwo は doSomeworkThree に依存します。これらを同期させるために、コールバック関数はすべての関数でパラメーターとして渡されます。
function functionCall(data, callback){
...........
...........
doSomeworkOne(data, callback);
}
function doSomeworkOne(data, callback){
...........
...........
doSomeworkTwo(otherData, callback);
}
function doSomeworkTwo(otherData, callback){
...........
...........
doSomeworkThree(otherData, callback);
}
<span style="font-size:16px;"><span style="font-family:arial,helvetica,sans-serif;"> function doSomeworkThree(otherData, callback){
...........
...........
callback(result);
}
</span></span>
function callback(data){
return data
}
一方、Callbackは良いです。コールバックの主な問題は、コールバック内にネストされていること、コールバック内にネストされていることです。ネストされたコールバックでは、コードのテスト/保守が非常に困難です。
ここで約束が来ます。Promise は、非同期コードを処理するためのよりクリーンで堅牢な方法を提供します。コールバックを使用する代わりに。また、promise でエラーを処理するのも非常に簡単です。
function functionCall(data){
doSomeworkOne(data).then(function(data){
return doSomeworkTwo(data);
}).then(function(data){
return doSomeworkThree(data);
}).catch(function(e) {
// error handle
});
}
function doSomeworkOne(data){
retrun new Promise(function(resolve, reject){
...........
...........
if(error){
reject(error);
}else{
resolve(success);
}
})
}
function doSomeworkTwo(data){
retrun new Promise(function(resolve, reject){
...........
...........
if(error){
reject(error);
}else{
resolve(success);
}
})
}
function doSomeworkThree(data){
retrun new Promise(function(resolve, reject){
...........
...........
if(error){
reject(error);
}else{
resolve(success);
}
})
}
注: Promise と Callback は基本的に違いはありません。Promise は、一連のアクションを実行するネストされたコールバックで推奨されます。これがお役に立てば幸いです。ありがとう。