如果沒有使用promise,而用callback的方式完成,程式碼大概會是這樣...
task1(function (value1) { task2(value1, function(value2) { task3(value2, function(value3) { //do something with value3... }); }); });
使用Promise
承上,若使用promise,只要等到目前的工作(task 1)完成,回傳一個訊息告知下一個工作(task 2)可以開始動工,就解決這個callback hell的問題了。
var Q = require('q');, deferred = Q.defer(); function task1(value1) { var response = "Complete task with " + value1; deferred.resolve(response); return deferred.promise; }; function task2(value2) { console.log(value2); }; task1('Hello World').then(function(success) { task2(success); },function(error){ console.log(error); },function(progress){ console.log(progress); });
注意,回傳的promise有三種狀態:
- 回傳成功:
deferred.resolve('resolve')
- 回傳失敗:
deferred.reject('reject')
- 回傳處理中:
deferred.notify('in progress')
沒有留言:
張貼留言