【问题标题】:Query first works but find does not查询首先有效,但查找无效
【发布时间】:2016-08-07 06:00:09
【问题描述】:

我正在使用 angularjs 和 parse.com 来查询三个成员 spotlight = true

当我第一次使用时,它会找到一个,但是当我将 find 与 limit(3) 一起使用时,它什么也找不到。我什至删除了Limit(3),但仍然没有。我已经搜索了互联网,在尝试了一些东西后我发现结果仍然是零。

    app.controller('spotlightCtrl', function($scope, $q) {

    $scope.sl = {};
    $scope.slmemid = "";

    Parse.initialize("xxx", "xxx");
    Parse.serverURL = 'https://parseapi.back4app.com';
    var ArticleDfd = $q.defer();
    var members = Parse.Object.extend('members');
    var query = new Parse.Query(members);
    query.equalTo("spotlight", true);
        query.first().then(function (data) {
 //query.find().then(function (data) {      -----this find does not return results.
            ArticleDfd.resolve(data);
            }, function (error) {
            ArticleDfd.reject(data);
             console.log(error);
            });
            ArticleDfd.promise
            .then(function (article) {
                $scope.sl = article.attributes;
                $scope.slmemid = article.id;
              console.log(article);
            })
            .catch(function (error) {
                //do something with the error
             console.log(error);
            });

});

仍在寻找正确的方法。 我找到了解决办法。我使用 skip() 函数并制作了三个控制器。

app.controller('spotlightCtrl1', function($scope, $q) {.....
    .....
    query.equalTo("spotlight", true);
    query.first().then(function (data) {

app.controller('spotlightCtrl2', function($scope, $q) {......
    .....
    query.equalTo("spotlight", true).skip(1);
    query.first().then(function (data) {...

app.controller('spotlightCtrl3', function($scope, $q) {......
    .....
    query.equalTo("spotlight", true).skip(2);
    query.first().then(function (data) {....

我认为这会慢一些。还想知道正确的代码吗??

【问题讨论】:

  • 我没有看到您的查询有任何问题...如果您删除 equalTo 条件,您会得到结果吗?
  • 这就是我的想法,删除 equalTo 会给我同样的结果。我首先得到结果,而查找没有结果?还有其他想法吗?
  • 我不知道 angularjs 但 first 返回一个 Parse Object 但 find 返回解析对象列表(数组 - [数据])...您收到一些错误或什么都没有返回?
  • 我还要说,尝试记录捕获错误。旁注,不需要 ArticleDfd defer 的包装,只需执行:ArticleDfd = query.first/query.find
  • find() 不起作用和 first() 起作用的唯一原因是错误。我想这可能是因为您收藏中的一条记录已损坏。您能否尝试运行 find() 查询并将错误日志(如果您遇到错误)添加到问题中?

标签: javascript angularjs parse-platform back4app


【解决方案1】:

在对 Stackoverflow 和 back4app.com 进行搜索和提问后,我找到了自己的解决方法(我的所有问题都没有收到任何反馈)。

我使用了 REST。 “大于”(#gt)日期有一个棘手的问题。我在 stackoverflow 上找到了工作语法。另外“请记住使用https://parseapi.back4app.com/ 端点而不是https://api.parse.com/1/”来自 Davi Macedo,这是我在 Google Groups 上搜索时遇到的。

$http({
      method: 'GET',
      url: ' https://parseapi.back4app.com/classes/Events',
      headers: {
        'X-Parse-Application-Id' : 'xxxx',
        'X-Parse-REST-API-Key' : 'xxxx',
        'Content-Type' : 'application/json'
      },
      params:  { 
                 where: {
                     'Luncheon': true,
                     'eventDate':{'$gt': {
                     "__type":"Date", "iso": currentTime
                        }
                     }
                 },
                 order: 'eventDate',
                 limit: 2
              }
    }).then(function successCallback(response) {
        // this callback will be called asynchronously
        // when the response is available
        $scope.events = response.data.results;

      }, function errorCallback(response) {
        // called asynchronously if an error occurs
        // or server returns response with an error status.
        console.log(response);
  });

效果很好,我的查询完全可以替换损坏的查找查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2016-07-04
    • 2012-10-03
    相关资源
    最近更新 更多