【问题标题】:Unable to retrieve result from httpRequest in Parse Cloud function无法从 Parse Cloud 函数中的 httpRequest 检索结果
【发布时间】:2014-10-09 19:13:01
【问题描述】:

我在 Cloud 函数中运行 Parse httpRequest,我从另一个 Parse 作业调用该函数。我无法弄清楚如何从我在云作业中调用它的云函数中检索结果值/成功值。

云函数的代码如下:

Parse.Cloud.define("maps_request", function(request, response) {
  var maps_url = 'http://maps.googleapis.com/maps/api/directions/json';
  var origin = request.params.origin;
  var destination = request.params.destination;
  var waypoint = "via:" + request.params.waypoint;
  Parse.Cloud.httpRequest({
    url: maps_url,
    params: {
      origin: origin,
      destination: destination,
      waypoints: waypoint,
      optimizeWaypoints: true,
      durationInTraffic: true
    },
    success: function(directions) {
      var time = directions.data['routes'][0]['legs'][0]['duration']['value']
      time = time / 60.00
      response.success(time)
    },
    error: function(error) {
      response.error("Shit broke.")

    }
  })
});

以及云端作业中的调用代码:

var promise = Parse.Promise.as();
      promise = Parse.Cloud.run('maps_request', {
        origin: String(driverOriginAddress + " " + driverOriginZip),
        destination: String(driverDestinationAddress + " " + driverDestinationZip),
        waypoint: String(driverDestinationAddress + " " + driverDestinationZip)
      }, {
        success: function(results) {
          console.log("Results: " + results)
        },
        error: function(){
          console.log("Error")
        }
      })
      console.log(promise)

Parse 日志显示了我想要从 Cloud 函数获得的确切结果,但我得到了这个: "{"_resolved":false,"_rejected":false,"_resolvedCallbacks":[],"_rejectedCallbacks":[]}

我已经尝试了大约 50 种不同的版本来解决这个问题。任何帮助将不胜感激。

这是另一个版本的云功能代码:

Parse.Cloud.define("maps_request", function(request, response) {
  var maps_url = 'http://maps.googleapis.com/maps/api/directions/json';
  var origin = request.params.origin;
  var destination = request.params.destination;
  var waypoint = "via:" + request.params.waypoint;
  var test = []
  Parse.Cloud.httpRequest({
    url: maps_url,
    params: {
      origin: origin,
      destination: destination,
      waypoints: waypoint,
      optimizeWaypoints: true,
      durationInTraffic: true
    },
    success: function(directions) {
      var time = directions.data['routes'][0]['legs'][0]['duration']['value']
      time = time / 60.00
      test.push(time)
    },
    error: function(error) {
      console.log("Error")
    }
  }).then(function() {
    response.success(test[0])
  }, function (error) {
    response.error("Error2")
  })
});

然后调用:

var test = Parse.Cloud.run('maps_request', {
        origin: String(driverOriginAddress + " " + driverOriginZip),
        destination: String(driverDestinationAddress + " " + driverDestinationZip),
        waypoint: String(driverDestinationAddress + " " + driverDestinationZip)
      })
      console.log("Test: " + test)

httpResponse 显示正确的值,但仍然无法访问它们或分配给变量。

【问题讨论】:

    标签: javascript backbone.js parse-platform


    【解决方案1】:

    这听起来很对 - 您正在将 'promise' 的值记录到控制台。你必须实际 resolve() 让它调用你的云函数等等的承诺。

    【讨论】:

    • 感谢您的回复。我如何/在哪里解决承诺?添加了我一直在使用的另一个版本的代码,它返回类似的响应。
    【解决方案2】:

    没有必要将Parse.Cloud.run() 包装在一个promise 中,因为它已经返回了一个promise。

    另外,在您的第二个示例中,您调用云函数就好像它是一个 sync 调用而不是 async 并查看承诺而不是您想要的结果.

    试试这个:

    Parse.Cloud.run('maps_request', {
      origin: String(driverOriginAddress + " " + driverOriginZip),
      destination: String(driverDestinationAddress + " " + driverDestinationZip),
      waypoint: String(driverDestinationAddress + " " + driverDestinationZip)
    }).then(function (result) {
      // we have the result of the cloud function here, just log it for now
      console.log("Test:", result);
    }, function (error) {
      // uh oh!
      console.log(error);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多