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

在AngularJS 1.0.7中使用$ resources嵌套诺言

韦安怡
2023-03-14
问题内容

我需要在AngularJS 1.0.7中使用参数运行函数 “ searchBoats(boatType)” 。此参数是另一个函数
parseBoatType 的结果,该函数 正在运行使用$ resource调用API的服务
。当带有诺言的资源中返回boatType时,如何运行searchBoats?

这是我尝试的:

    var parseURL = function() {                                                         
            var deferred = $q.defer();
            var promise = deferred.promise;
            promise.then(function success (result) {                    
                console.log(result);
                searchBoats(result);
            });

            deferred.resolve(
                parseBoatType()
            );                                                                                                                                                                                                                          
        };      
        parseURL();

var parseBoatType = function() {

        //  Do some stuff        
        // Calculate boatType calling a service that uses resource to call 
        // an API
        // I can convert this callback into a promise but still facing same 
        // issue
        BoatType.getBoatTypeByName({name: boatTypeParsed}, function success(result) {
                return result;
            });

        // The service method is called and the code is still running until 
        // the end of the function without waiting for the service result.
        // Then the promise.then code in the parseURL is executed and 
        // searchBoats is run with boatType undefined.                                  
    };

 // The service with the $resource call to the API
.factory('BoatType',

  function($resource, SERVER_URL){          
    var boatTypes =
     $resource('http://' + SERVER_URL +'/:action', {action:'boat_types'}, {       
        query: {method:'GET', isArray: true},           
        getBoatTypeByName: {method:'GET', params:{action: 'getBoatTypeByName'}, isArray: false}
     });        
     return boatTypes;           
  }
  )

问题答案:

您可以$promise从函数中的BoatType资源返回资源,parseBoatTime并使用Promise来解决parseUrl延迟的问题。

首先从parseBoatTime函数返回一个promise :

return BoatType.getBoatTypeByName({
    name: boatTypeParsed
  }, function success(result) {
    return result;
  }).$promise;

然后parseUrl deferredBoatType资源中的承诺解决:

parseBoatType().then(deferred.resolve);

贝娄是从您的问题中得到的完整代码,我提到了更正。

var parseURL = function() {

  var deferred = $q.defer();

  var promise = deferred.promise;

  promise.then(function success(result) {

    console.log(result);

    searchBoats(result);

  });



  parseBoatType().then(deferred.resolve);

};

parseURL();



var parseBoatType = function() {



  //  Do some stuff

  // Calculate boatType calling a service that uses resource to call

  // an API

  // I can convert this callback into a promise but still facing same

  // issue



  // Code for ngResource@^1.2.0

  /*return BoatType.getBoatTypeByName({

    name: boatTypeParsed

  }, function success(result) {

    return result;

  }).$promise;*/



  // Code for ngResource lower than 1.2.0

  var deferred = $q.defer(), promise = deferred.promise;



  BoatType.getBoatTypeByName({

    name: boatTypeParsed

  }, deferred.resolve, deferred.reject);



  return promise;



  // The service method is called and the code is still running until

  // the end of the function without waiting for the service result.

  // Then the promise.then code in the parseURL is executed and

  // searchBoats is run with boatType undefined.

};



// The service with the $resource call to the API

app.factory('BoatType',

  function($resource, SERVER_URL) {

    var boatTypes =

      $resource('http://' + SERVER_URL + '/:action', {

        action: 'boat_types'

      }, {

        query: {

          method: 'GET',

          isArray: true

        },

        getBoatTypeByName: {

          method: 'GET',

          params: {

            action: 'getBoatTypeByName'

          },

          isArray: false

        }

      });

    return boatTypes;

  }

)


 类似资料:
  • 问题内容: 我是诺言和使用NodeJS中的请求和诺言编写网络代码的新手。 我想删除这些嵌套的Promise,而是将它们链接起来,但是我不确定我将如何处理它/这是否是正确的方法。 这是请求代码: 任何见识将不胜感激。 问题答案: 在每个回调中,您都需要 返回 新的Promise: 调用返回的承诺然后将使用“内部”承诺中的值进行解析,以便您可以轻松地链接它们。 通用模式:

  • 我试图在脚本分数中使用嵌套值,但我在使它工作时遇到了问题,因为我无法通过doc访问它来迭代字段。此外,当我尝试在Kibana中像< code > _ type:images AND _ exists _:colors 一样查询它时,它不会匹配任何文档,即使当我单独查看所有文档时,该字段都清楚地出现在它们中。不过,我可以使用参数来访问它。_source,但是我看过可以慢一点慢一点,真的不推荐。 我知

  • 问题内容: 我是诺言和使用NodeJS中的请求和诺言编写网络代码的新手。 我想删除这些嵌套的Promise,而是将它们链接起来,但是我不确定我将如何处理它/这是否是正确的方法。 这是请求代码: 任何见识将不胜感激。 问题答案: 在每个回调中,您都需要 返回 新的Promise: 调用返回的承诺然后将使用“内部”承诺中的值进行解析,以便您可以轻松地链接它们。 通用模式:

  • 我有一个spring boot应用程序,我想在其中外部化消息。我将这些消息分为错误、信息和成功。因此,我创建了如下所示的嵌套文件夹结构: 并且,我正试图通过以下方式从服务中访问它: 这给了我以下例外情况: missingResourceException:找不到bundle的基本名称错误,区域设置为 但是,如果我将属性文件保存在下面的文件夹之外,它可以正常工作: null

  • 我想在SpringBoot中使用quartz运行一个作业,其中多个线程将执行该方法。我想要的是将每次处理的结果都保存在redis中,这样我就可以知道这个工作有多好。 我想以这种形式保存redis中的数据。 我想插入关键日期中的所有项目。因为有多个线程在工作,所以每个线程都在处理某个项目。所以所有项目都应该只插入到键(日期)中。 可能吗? 一种解决方案是一次又一次地重写(date)键的数据,首先从r

  • 我被困在将嵌套JS与宇宙数据库核心SQL API集成上。我知道有一个用于 Cosmos DB 的模块(https://github.com/nestjs/azure-database),但我需要数据架构来支持嵌套的 json,如下所示: 我认为@nestjs/azure-database不支持这一点(或者我可能错了),因为当我检查他们的示例和quickstart时,没有这样的json模式的示例。