Chi*_*n S 4 javascript promise angularjs
我正在编写一个异步的javascript函数,消费者会调用它来获取某些数据.以下是我最初编写的简单实现(为了清楚起见,错误处理和其他内容被删除).
function getData(callback){
if (data is available as a JavaScript object){
callback(data);
}else{
getAsyncData(function(data){
//some transformations on data
callback(data);
});
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的重要一点是,如果数据已作为JavaScript对象可用,则getData可以快速返回数据.
我想将此实现替换为将一个promise对象返回给调用者的实现.这个小提琴显示了示例实现 - http://fiddle.jshell.net/ZjUg3/44/
问题 - 因为getData可以快速返回,即使在调用者使用then方法建立处理程序链之前,getData是否有可能解析 promise ?只是为了模拟这个,如果我在setTimeout函数中调用then方法(零延迟),则不会调用回调函数.如果我在setTimeout函数之外调用then方法,则调用callback.我不确定这是否是一个有效的关注或有效的用例.我是angularjs开发的新手,非常感谢你的观点:)
如果你想getData()返回一个$qpromise而不是使用回调,我会使用$q.when()和通常做以下的重构$q.resolve():
function getData()
{
if (data is available as a JavaScript object) {
return $q.when(data); // resolves immediately
} else {
var q = $q.defer();
getAsyncData(function(data){
//some transformations on data
q.resolve(data);
});
return q.promise;
}
}
Run Code Online (Sandbox Code Playgroud)