节点 js (Parse.com) 中的 http 请求承诺失败
Promises fail for httprequest in nodejs (Parse.com)
我正在尝试在 parse.com 服务器上的 nodejs 中连续实施 3 个 httprequest。我仍在尝试弄清楚它是如何工作的。目前,以下代码没有抛出语法错误,但在服务器日志中也有一个 return 的单个空白 console.log。非常感谢任何帮助。
Parse.Cloud.define('paypalCheck', function (request, response) {
Parse.Cloud.httpRequest({
method: 'POST',
url:url1,
body:body1
}).then(function(httpResponse){
console.log(httpResponse.text.split("\n")[0])
var promises = [];
var updated = false;
if(httpResponse.text.split("\n")[0] == 'FAIL'){
var orderUpdate = Parse.Cloud.httpRequest({
method: 'POST',
url:url2,
headers:header2,
body:body2
}).then(function(httpResponse) {
console.log('updated')
updated = true;
return 'order updated';
});
promises.push(orderUpdate);
}
if(updated){
var orderFetch = Parse.Cloud.httpRequest({
method: 'GET',
url:url3,
headers:header3
}).then(function(httpResponse) {
return_url = httpResponse.data.order.order_status_url
return httpResponse;
});
promises.push(orderFetch);
}
return Parse.Promise.when(promises)
}).then(function(httpResponse){
console.log('result');
console.log(httpResponse);
response.success(return_url)
}, function(error){
console.log('result');
response.error(error)
})
})
我觉得问题是,你没有声明 return_url
var.
这一行使用了 return_url = httpResponse.data.order.order_status_url
但我没有看到声明。
当您没有声明变量时应用程序崩溃并且您不会收到错误,只是停止工作。
也尝试在您的 Promises 中实现 catch 子句,这可能会帮助您进行调试。
您的代码需要进行一些修改:
Parse.Cloud.define('paypalCheck', function (request, response) {
Parse.Cloud.httpRequest({
method: 'POST',
url:url1,
body:body1
}).then(function(httpResponse){
console.log(httpResponse.text.split("\n")[0])
var promises = [];
var updated = false;
if(httpResponse.text.split("\n")[0] == 'FAIL'){
return Parse.Cloud.httpRequest({
method: 'POST',
url:url2,
headers:header2,
body:body2
}).then(function(httpResponse) {
console.log('updated')
updated = true;
return Parse.Cloud.httpRequest({
method: 'GET',
url:url3,
headers:header3
});
}).then(function(httpResponse) {
return_url = httpResponse.data.order.order_status_url
return httpResponse;
});;
}
else console.log("FAIL was true, do nothing");
}).then(function(httpResponse){
console.log('result');
console.log(httpResponse);
response.success(return_url)
}, function(error){
console.log('result');
response.error(error)
})
})
首先,我在您对 httpResponse.text.split 的检查中添加了一个 else 条件,看看它是否命中。
其次,我已经摆脱了您的 Parse.Promise.when() 调用,而是链接了您发出的请求,以便它们按顺序正确发生。按照您的方式, if(updated) 永远不会通过,因为检查会在第二个 httpRequest 返回之前发生。
如果这改变了你的输出,请告诉我。
我正在尝试在 parse.com 服务器上的 nodejs 中连续实施 3 个 httprequest。我仍在尝试弄清楚它是如何工作的。目前,以下代码没有抛出语法错误,但在服务器日志中也有一个 return 的单个空白 console.log。非常感谢任何帮助。
Parse.Cloud.define('paypalCheck', function (request, response) {
Parse.Cloud.httpRequest({
method: 'POST',
url:url1,
body:body1
}).then(function(httpResponse){
console.log(httpResponse.text.split("\n")[0])
var promises = [];
var updated = false;
if(httpResponse.text.split("\n")[0] == 'FAIL'){
var orderUpdate = Parse.Cloud.httpRequest({
method: 'POST',
url:url2,
headers:header2,
body:body2
}).then(function(httpResponse) {
console.log('updated')
updated = true;
return 'order updated';
});
promises.push(orderUpdate);
}
if(updated){
var orderFetch = Parse.Cloud.httpRequest({
method: 'GET',
url:url3,
headers:header3
}).then(function(httpResponse) {
return_url = httpResponse.data.order.order_status_url
return httpResponse;
});
promises.push(orderFetch);
}
return Parse.Promise.when(promises)
}).then(function(httpResponse){
console.log('result');
console.log(httpResponse);
response.success(return_url)
}, function(error){
console.log('result');
response.error(error)
})
})
我觉得问题是,你没有声明 return_url
var.
这一行使用了 return_url = httpResponse.data.order.order_status_url
但我没有看到声明。
当您没有声明变量时应用程序崩溃并且您不会收到错误,只是停止工作。
也尝试在您的 Promises 中实现 catch 子句,这可能会帮助您进行调试。
您的代码需要进行一些修改:
Parse.Cloud.define('paypalCheck', function (request, response) {
Parse.Cloud.httpRequest({
method: 'POST',
url:url1,
body:body1
}).then(function(httpResponse){
console.log(httpResponse.text.split("\n")[0])
var promises = [];
var updated = false;
if(httpResponse.text.split("\n")[0] == 'FAIL'){
return Parse.Cloud.httpRequest({
method: 'POST',
url:url2,
headers:header2,
body:body2
}).then(function(httpResponse) {
console.log('updated')
updated = true;
return Parse.Cloud.httpRequest({
method: 'GET',
url:url3,
headers:header3
});
}).then(function(httpResponse) {
return_url = httpResponse.data.order.order_status_url
return httpResponse;
});;
}
else console.log("FAIL was true, do nothing");
}).then(function(httpResponse){
console.log('result');
console.log(httpResponse);
response.success(return_url)
}, function(error){
console.log('result');
response.error(error)
})
})
首先,我在您对 httpResponse.text.split 的检查中添加了一个 else 条件,看看它是否命中。
其次,我已经摆脱了您的 Parse.Promise.when() 调用,而是链接了您发出的请求,以便它们按顺序正确发生。按照您的方式, if(updated) 永远不会通过,因为检查会在第二个 httpRequest 返回之前发生。
如果这改变了你的输出,请告诉我。