当前位置: 首页 > 面试题库 >

立即使用AngularJS返回已解决的Promise

姚海
2023-03-14
问题内容

我正在努力克服JavaScript(特别是AngularJS)中的承诺。

我在服务中有一个函数,我们称它为fooService,它检查是否已加载一些数据。如果有,我只希望它返回,否则,我们需要加载数据并返回promise:

this.update = function(data_loaded) {
    if (data_loaded) return;  // We've loaded the data, no need to update

    var promise = Restangular.all('someBase').customGet('foo/bar').then(function(data) {
        // Do something with the data here
    }

    return promise;
}

我有另一个函数,然后调用如下update函数fooService

fooService.update(data_loaded).then(function() {
    // Do something here when update is finished
})

我在这里的问题是,如果我们不需要在update函数中加载数据,则不会返回promise,因此.then()在其他函数中不会调用the
。这里的方法应该是什么-基本上,update()如果我们不需要从Restangular调用中获取数据,我想立即从该函数返回一个已解决的Promise?


问题答案:

当前公认的答案过于复杂,并且滥用了推迟的反模式。这是一个更简单的方法

this.update = function(data_loaded) {
    if (data_loaded) return $q.when(data);  // We've loaded the data, no need to update

    return Restangular.all('someBase').customGet('foo/bar')
                             .then(function(data) {
        // Do something with the data here 
    });
};

或者,甚至更进一步:

this._updatep = null;
this.update = function(data_loaded) { // cached
    this._updatep = this._updatep || Restangular.all('someBase') // process in
                                                .customGet('foo/bar'); //.then(..
    return this._updatep;
};


 类似资料:
  • 问题内容: 我的服务是: 我通过以下方式在我的文件中调用它: 但是,它抱怨这不是一个功能。我不退还已解决的承诺吗? 问题答案: 从您的服务方式: 在您的控制器中:

  • input Type="hiddit"name="RM"value="0"结束交易后,Paypal返回到input Type="hiddit"name="return"中定义URL(不包括GET中的支付变量), 如果我设置输入类型=“hidden”name=“rm”value=“2”在结束交易后,在输入类型=“hidden”name=“return”中定义的URL处Paypal返回,并在POST中

  • 本文向大家介绍使用AOP的@Around后无返回值的解决,包括了使用AOP的@Around后无返回值的解决的使用技巧和注意事项,需要的朋友参考一下 经测试,是环绕通知改变了返回值,切面方法需要有返回值,来代替被代理方法返回结果 改成如下即可: 让其执行后的结果返回即可。 补充:spring aop @Around 返回参数值为空 在做 spring 项目中用到aop,拦截前端请求后AOP中@Aro

  • 免责声明: 这不是onrequestpermissionsresult授权结果的重复始终-1,因为OP认识到它没有在清单中添加权限。 这也不是onrequestpermissionsresult在拒绝权限后立即返回的重复,因为OP在清单中犯了拼写错误。 我正在开发一个应用程序,需要安装其他应用程序(我们在内部开发,并通过web服务在我们的内部网上服务)。我无法授予安装该APK的权限。 以下是我到目

  • 问题内容: 我正在尝试编写一个返回诺言的函数。但是有时候,所请求的信息会立即可用。我想将其包装在一个承诺中,这样消费者就不必做出决定了。 并像这样使用它: 问题在于,对于预解析的Promise不会执行回调。这是合法的事情吗?有没有更好的方法来处理这种情况? 问题答案: 简短的答案:是的,您可以 在返回AngularJS承诺之前将其解析,并且其行为将与您期望的一样。 来自JB Nizet的Plunk

  • 如果用非空数组调用promise.all或promise.race,它们将返回一个挂起的promise: 为什么promise。所有功能都是这样设计的?似乎没有很好的理由不一致,但也许我错过了什么。