【问题标题】:How to synchronize the function commands in angular js如何在angular js中同步函数命令
【发布时间】:2015-12-09 16:53:22
【问题描述】:

我正在创建一个离子应用程序,特别是在特定场景中 当从列表中选择员工时(从 JSON 数据数组生成),他的详细信息将从这里显示

var employees = [{"id": 325, "firstName": "James", "lastName": “King”、“managerId”:0、“managerName”:“”、“reports”:4、“title”: “总裁兼首席执行官”、“部门”:“公司”、“手机”: “617-000-0001”、“办公室电话”:“781-000-0001”、“电子邮件”: “jking@gmail.com”,“城市”:“马萨诸塞州波士顿”,“图片”:“James_King.jpg”, “twitterId”:“@fakejking”,“博客”:“http://coenraets.org”}.....

我只需要找到 ID 的索引来显示完整的对象。

     findById: function(employeeId) {
                var deferred = $q.defer();

                var searchValue = {'id': employeeId };
                index = -1;
                _.each(employees, function(data, idx) { 
                if (_.isEqual(data, searchValue)) {
                index = idx;
                return;
                }
                });

                var employee = employees[index];
                deferred.resolve(employee);
                return deferred.promise;
            },

为此,我正在使用这个函数,它没有在 _.each 函数中使用调试器

请告诉我我哪里错了。

【问题讨论】:

    标签: javascript angularjs service ionic


    【解决方案1】:

    这是行不通的,因为表达式 _.isEqual(employees[xxx], {id: 325}) 永远不会返回匹配项。

    改为使用_.find 方法

    findById: function(employeeId) {
        var employee = _.find(employees, {id: employeeId});
        return $q.when(employee);
    }
    

    【讨论】:

    • 我不知道$q.when()。这是在做什么?
    • $q 承诺价值。您应该使用它而不是延迟对象。
    • 啊,这很有帮助。我的解决方案有点费力。谢谢。
    【解决方案2】:

    我认为您可以稍微简化一下您的功能,因为您使用的是 lodash:

    findById: funtion(employeeId) {
        return _.findWhere(employees, {id : employeeId});
    }
    

    此外,我看不出有任何理由在这里使用 Promise,但按照这个概念,你可以试试这个:

    findById: funtion(employeeId) {
        var deferred = $q.defer();
    
        $timeout(function() {
            var employee = _.findWhere(employees, {id : employeeId});
    
            if (found !== undefined) {
                deferred.resolve(employee);
            } else {
                deferred.reject();
        }, 0);
    
        return deferred.promise;
    }
    

    你需要在resolve()reject()之前返回promise deferred.promise,所以你可以在你的被调用者中等待。

    希望有帮助!

    【讨论】:

      【解决方案3】:

      我不知道您是否真的需要索引。当您找到数据时,要制定一个解决方案,在那个时刻返回员工,这会更好,更短。比你也应该跳出循环。

      如果您的调试器没有在 _.each 中跳转,您的员工数组可能为空。 你可以试试这样的:

             findById: function(employeeId) {
                  var deferred = $q.defer();  
                  // deferred should be inside the scope of _.each
                  // because it is defined here
      
                  var searchValue = {'id': employeeId };
                  //index = -1;
                  // check your data here
                  // for example console.log(employees.length)
                  // or make a breakpoint here and check employees
                  _.each(employees, function(data, idx) { 
                  // make a console.log(idx) here to check your data
                  if (_.isEqual(data, searchValue)) {
                    deferred.resolve(data);
                    return deferred.promise;;
                  }
                  });
      
              },
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-28
        • 1970-01-01
        • 1970-01-01
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多