2015-06-18 109 views
0

我试图做一个Parse.Cloud.httpRequest呼叫时,作业成功执行了,但我没有得到任何回应。如果我在RestClient上运行请求,它会执​​行正常,但由于某种原因,它不适用于解析云代码。我究竟做错了什么?Parse.Cloud.httpRequest没有返回响应

Parse.Cloud.job("Loader", function(request, status) { 

var xmlreader = require('cloud/xmlreader.js'); 
var moment = require('cloud/moment.js'); 

var query = new Parse.Query("Codes"); 
query.each(function(a) { 
    var curDateMonth = moment().date(); 
    var curMonth = moment().add(1, 'months').month(); 
    var curYear = moment().year(); 

    Parse.Cloud.httpRequest({ 
    url: 'https://.....' 
}).then(function(httpResponse) { 
    console.log(httpResponse.text); 
}, function(httpResponse) { 
    console.error('Request failed with response code ' + httpResponse.status); 
}); 

}).then(function() { 
    // Set the job's success status 
status.success("Saved successfully."); 
}, function(error) { 
// Set the job's error status 
status.error("Uh oh, something went wrong."); 
}); 
}); 

回答

0

Parse.Cloud.httpRequest()是一个异步函数调用。它不会阻塞线程,因此您的代码将继续运行至status.success("Saved successfully.");你得到的HttpRequest()的结果之前。

Parse.Cloud.httpRequest()现在返回一个承诺,所以你可以简单地把它们连在一起。

Parse.Cloud.job("Loader", function(request, status) { 
    var xmlreader = require('cloud/xmlreader.js'); 
    var moment = require('cloud/moment.js'); 

    var query = new Parse.Query("Codes"); 
    query.each(function(a) { 
     var curDateMonth = moment().date(); 
     var curMonth = moment().add(1, 'months').month(); 
     var curYear = moment().year(); 

     return Parse.Cloud.httpRequest({ 
      url: 'https://.....' 
     }); 
    }).then(function(httpResponse) { 
     console.log(httpResponse.text); 
     status.success("Saved successfully. httpResponse: " + httpResponse.text); 
    }, function(error) { 
     // Set the job's error status 
     status.error("Uh oh, something went wrong."); 
    }); 
}); 


编辑

each()是不同的东西,所以请直接在成功回调添加到HttpRequest的。

Parse.Cloud.job("Loader", function(request, status) { 
    var allHttpResponseTexts = ''; 

    var query = new Parse.Query("Codes"); 
    query.each(function(a) { 
     return Parse.Cloud.httpRequest({ 
      url: 'http://example.com', 
      success: function(httpResponse) { 
       // Process httpResponse.text here 

       allHttpResponseTexts += httpResponse.text.substr(0, 50); 
      } 
     }); 
    }).then(function(httpResponse) { 
     status.success("Saved successfully. allHttpResponseTexts: " + allHttpResponseTexts); 
    }, function(error) { 
     status.error("Uh oh, something went wrong. " + error.code + ' - ' + error.message); 
    }); 
}); 

最终的结果是:

Saved successfully. allHttpResponseTexts: <!doctype html> <html> <head> <title>Example D...

+0

iForests,谢谢大家的响应,当我运行上面的代码我得到以下错误“与失败:类型错误:无法读取属性“文本“未定义” –

+0

你能提供你的'Parse.Cloud.httpRequest'的详细信息代码?我没有完成我的代码中的网址部分。 – iForests

+0

返回Parse.Cloud.httpRequest({ URL: 'https://api.stats.co.za/json' }); –