从一个能够很快解决这个承诺的函数中返回角度承诺

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开发的新手,非常感谢你的观点:)

Fer*_*lli 5

如果你想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)