lurenzhao 发表于 2015-6-24 22:11:14

请问为何过本地的json文件获取数据总是获取的是promise对象

老大们,新手求助:请问we过本地的json文件获取数据总是获取的是promise对象,导致无法正常解析显示。
用的是ionic tab的模板,把service.js的数据改成了http得get获取,代码如下:
ngular.module('starter.services', [])

    .factory('Chats', function ($http) {
      // Might use a resource here that returns a JSON array

      //alert("1");
      // Some fake testing data
      /*var chats = [{
         id: 0,
         name: 'Ben Sparrow11',
         lastText: 'You on your way?',
         face: 'img/ionic.png'
         }, {
         id: 1,
         name: 'Max Lynx',
         lastText: 'Hey, it\'s me',
         face: 'https://avatars3.githubusercontent.com/u/11214?v=3&s=460'
         },{
         id: 2,
         name: 'Adam Bradleyson',
         lastText: 'I should buy a boat',
         face: 'http://a.hiphotos.baidu.com/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=ab55cb8362d9f2d3341c2cbdc885e176/9c16fdfaaf51f3de642e4d0694eef01f3a297930.jpg'
         }, {
         id: 3,
         name: 'Perry Governor',
         lastText: 'Look at my mukluks!',
         face: 'img/ionic.png'
         }, {
         id: 4,
         name: 'Mike Harrington',
         lastText: 'This is wicked good ice cream.',
         face: 'https://pbs.twimg.com/profile_images/578237281384841216/R3ae1n61.png'
         }];*/
      var chats = null;
      var url = "js/data";
      chats = $http.get(url).success(function (response) {
            chats = response;
            console.log("1");
            console.log(response);
            return response;
      });
      console.log("2");
      console.log(chats);


      return {
            all: function () {
                console.log("3");
                console.log(chats);
                returnchats;
            },
            remove: function (chat) {
                chats.splice(chats.indexOf(chat), 1);
            },
            get: function (chatId) {
                console.log('get'+chatId+" "+chats.length);
                for (var i = 0; i < chats.length; i++) {
                  if (chats.id === parseInt(chatId)) {
                        console.log('get'+chats.name);
                        return chats;
                  }
                }
                return null;
            }

      };
      //return $http.get(url);
    });
打印log的时候,发现log2->log3->log1这种顺序打印的,明明我得get函数先写的,为何log1最后执行。而且get函数外部的chats都是promise类型,无法解析显示。

跪谢!!!!

admin 发表于 2015-6-24 23:14:34

打印log的时候,发现log2->log3->log1这种顺序打印的,明明我得get函数先写的,为何log1最后执行。而且get函数外部的chats都是promise类型,无法解析显示。



你要知道这个是异步请求,就是下面的程序不会等到你get请求完成在打印的,而是先会执行


还有你上面问了一大堆 不明白是你的接口返回数据有问题还是?

lurenzhao 发表于 2015-6-24 23:21:03

admin 发表于 2015-6-24 23:14
打印log的时候,发现log2->log3->log1这种顺序打印的,明明我得get函数先写的,为何log1最后执行。而且get ...

老大,您好!在get中返回的数据没有问题!由于是异步的,如果我直接使用return中得all()方法,拿到的数据就变成promise的了,并不是get中获得的普通数组类型的object,无法通过像普通数组一样解析了。有没有什么方法能让我在all()方法中得chats类型跟get中 的chats获得数据保持一致呢?

lurenzhao 发表于 2015-6-24 23:22:34

admin 发表于 2015-6-24 23:14
打印log的时候,发现log2->log3->log1这种顺序打印的,明明我得get函数先写的,为何log1最后执行。而且get ...

老大,请问有什么方法能让我先把get的数据获得,再显示到界面呢?现在由于异步,导致我想通过all()显示get获取的数据无法显示呢。
页: [1]
查看完整版本: 请问为何过本地的json文件获取数据总是获取的是promise对象