javascript - 在另一个函数中请求函数响应

标签 javascript parse-platform parse-cloud-code

我有这两个函数,我从“Count”调用“http”,“http”返回 promise 。我想在“Count”中使用“http”的返回值。我现在收到的是未定义!!! 我缺少什么?

计数功能:

Parse.Cloud.define('count', function(request, response) {

var query = new Parse.Query('MyS');
  query.equalTo("Notify", true);
  query.notEqualTo ("MainEventCode", '5');

  query.find({
    success: function(results) {
      Parse.Cloud.run('http', {params : results}).then(
        function(httpResponse) {
          console.log('httpResponse is : ' + httpResponse.length);
          response.success('Done !');
        }, function(error) {
          console.error(error);
      });
    },
    error: function(error) {
      response.error(error);
    }
  });
});

http 功能:

Parse.Cloud.define('http', function(request, response) {

var query = new Parse.Query(Parse.Installation);
.
.
.
}

最佳答案

依靠通过外部接口(interface)调用自己的函数并不是一个很好的做法。

现在您已经意识到您将需要相同的代码来实现不同的目的,您应该花时间重构您的代码,这样您就不需要调用 'http' 通过 Parse.Cloud.run() 处理程序:

function doHttp(params) {
    // original implementation here
}

Parse.Cloud.define('http', function(request, response) {
  doHttp(request.params)
    .then(response.success)
    .fail(response.error);
}

Parse.Cloud.define('count', function(request, response)) {
  var query = new Parse.Query('MyS');
  query.equalTo("Notify", true);
  query.notEqualTo ("MainEventCode", '5');

  query.find()
    .then(doHttp) // doHttp will receive the results from `query` as its parameter
    .then(function(httpResponses) {
      // httpResponses is an array-like object as per the other question:
      httpResponses = Array.prototype.slice.call(httpResponses);
      httpResponses.forEach(function (response) {
        console.log('httpResponse is : ' + response.length);
      });
    }).fail(response.error);
}

我已经查看了另一个问题,就 count 的实现而言,我相信您错过了 'http' 的要点返回参数,这只是一个 Array-like object .

如果 Parse.Cloud.run 在另一个虚拟机上运行您的函数,这应该没问题,但这种奇怪的行为是不通过外部调用重构和重用代码的另一个症状(使用 JSON 传递在其基础设施内进行 HTTP 请求!这可能会大大降低性能并计入您的请求/秒配额)。如果 Parse 做了一些魔法来直接调用您的函数,就好像它是在同一环境中定义的一样,那么您将会遇到问题,因为它不是一个实际的Array

如果可能的话,您应该修改该函数以返回正确的数组。 Parse CloudCode 的版本为 Underscore图书馆:

// on http
var _ = require('underscore');
Parse.Promise.when(promises).then(function() {
  var results = _.toArray(arguments) // equivalent to Array.prototype.slice above
  response.success(results);
}

关于javascript - 在另一个函数中请求函数响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752377/

相关文章:

javascript - 解析服务器云代码错误 141 : Unauthorized

javascript - 切换开关在 IE 中未保持打开状态

ios - 解析数据库返回重复结果?

database - 一对多的可扩展性和获取许多的效率 - parse.com

android - 如何更改 Android 中的 Parse 推送通知图标?

ios - 当特定用户发帖时解析推送通知

javascript - Parse Cloud 代码迭代结果问题

javascript - "Simon Says"计算机随机选择显示不正确

javascript - 使用 lodash trim 对象键

javascript - 使用基于文档的数据存储实现复杂搜索的最佳方法