nodejs (Parse.com) 中 httprequest 的承诺失败

问题描述 投票:0回答:2

我正在尝试在 parse.com 服务器上用 Nodejs 实现 3 个连续的 httprequests。我仍在尝试弄清楚它是如何工作的。目前,以下代码不会引发语法错误,但还会在服务器日志中返回一个空白的 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)
    })
})
javascript node.js parse-platform promise httprequest
2个回答
1
投票

您的代码需要进行一些修改:

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 返回之前发生。

如果这改变了你的输出,请告诉我。


0
投票

我觉得问题是,你没有声明

return_url
var.

在这一行中使用了

return_url = httpResponse.data.order.order_status_url
,但我没有看到声明。

当你没有声明变量时应用程序崩溃并且你不会得到错误,只停止工作。

还尝试在您的 Promises 中实现 catch 子句,这可能会帮助您进行调试。

© www.soinside.com 2019 - 2024. All rights reserved.