使用 q 建構函式建立 promise
$q
建構函式用於從使用回撥返回結果的非同步 API 建立 promise。
$ q(函式(解析,拒絕){…})
建構函式接收一個函式,該函式使用兩個引數 resolve
和 reject
呼叫,這兩個引數是用於解析或拒絕 promise 的函式。
例 1:
function $timeout(fn, delay) {
return = $q(function(resolve, reject) {
setTimeout(function() {
try {
let r = fn();
resolve(r);
}
catch (e) {
reject(e);
}
}, delay);
};
}
上面的示例從 WindowTimers.setTimeout API 建立一個 promise。AngularJS 框架提供了此功能的更精細版本。有關用法,請參閱 AngularJS $ timeout 服務 API 參考 。
例 2:
$scope.divide = function(a, b) {
return $q(function(resolve, reject) {
if (b===0) {
return reject("Cannot devide by 0")
} else {
return resolve(a/b);
}
});
}
上面的程式碼顯示了一個 promisified 除法函式,如果計算不可能,它將返回帶有結果的 promise 或者拒絕帶有原因。
然後你可以呼叫 .then
$scope.divide(7, 2).then(function(result) {
// will return 3.5
}, function(err) {
// will not run
})
$scope.divide(2, 0).then(function(result) {
// will not run as the calculation will fail on a divide by 0
}, function(err) {
// will return the error string.
})