[英]Returning angular promise from a function that resolves the promise very quickly
我正在编写一个异步的javascript函数,消费者会调用它来获取某些数据。 以下是我最初编写的简单实现(为了清楚起见,错误处理和其他内容被删除)。
function getData(callback){
if (data is available as a JavaScript object){
callback(data);
}else{
getAsyncData(function(data){
//some transformations on data
callback(data);
});
}
}
需要注意的重要一点是,如果数据已作为JavaScript对象可用,则getData可以快速返回数据。
我想将此实现替换为将一个promise对象返回给调用者的实现。 这个小提琴显示了示例实现 - http://fiddle.jshell.net/ZjUg3/44/
问题 - 因为getData可以快速返回,即使在调用者使用then方法建立处理程序链之前,getData是否有可能解析 promise? 只是为了模拟这个,如果我在setTimeout函数中调用then方法(零延迟),则不会调用回调函数。 如果我在setTimeout函数之外调用then方法,则调用callback。 我不确定这是否是一个有效的关注或有效的用例。 我是angularjs开发的新手,非常感谢你的观点:)
如果你想让getData()
返回一个$q
promise而不是使用回调,我会使用$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;
}
}
不,作为承诺的一个重要而重要的部分是,当您附加处理程序时无关紧要。 即使您现在创建了一个承诺并立即解决它,然后让您的计算机在接下来的50年内继续运行,然后附加一个它仍将触发的处理程序。
所有这一切都假设angularjs的promise实现中没有bug / corner案例。 如果它不起作用,那它就是一个bug。
如果您需要了解Promises如何工作,您可以随时参考Promises / A +规范哪个角度adheers。 作为一个规范,它是我遇到的最简单和最容易理解的一个(虽然我应该提到我已经参与了规范很长一段时间了)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.