使用 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.
})