【问题标题】:How to successfully use the callback on an javascript function with an http request如何通过 http 请求成功地在 javascript 函数上使用回调
【发布时间】:2016-05-31 12:19:56
【问题描述】:

注意:我对 js 的 exp 有限,如果我描述这种情况的方式完全错误,请纠正我。

我有两个 javascript 文件。我在第一个文件(客户端)上调用一个函数,该函数在第二个文件上调用一个函数,并使用第二个文件函数的回调来达到第一个文件上的response.success/.error 的目的。

如果这没有意义,这里有一些代码:

注意:这是暂时使用 Parse 的云功能完成的。让我知道是否需要有关这些的更多信息,但不确定是否重要。

第一个文件:

Parse.Cloud.define("methodName", function(request, response) {
    ...
    secondFile.myFunction(param1, {
        stuff: request.params.stuff,
    }, function (err, res) {
        if (err) {
            response.error(err);
        } else {
            response.success(res);// I'm assuming this is going to the hardcoded "yes." from httpRequest on second file's function
        }
    });
});

第二个文件:

myFunction: function(param1, properties, callback) {
        if (!param1) return callback(new Error("Helpful error message"));

        var headersForReq = {
            ...
        };

        var bodyForReq = ...; // the properties properly parsed


        Parse.Cloud.httpRequest({
            method: 'PUT',
            url: ...,
            headers: headersForReq,
            body: bodyForReq,
            success: function (httpResponse) {
                callback(null, 'yes'); // the hardcoded "yes" i referred to
            },
            error: function (httpResponse) {
                callback(httpResponse.status + httpResponse.error);
            }
        });
    }

在我的客户端上,代码被视为成功(不会抛出或返回错误),但当我打印出该值时,它会显示为 (null) 而不是“是”。

这里发生了什么? (旁注,httpRequest 目前没有做任何事情,很难验证请求是否被正确发送,因为它被发送到第三方 API。

我知道第二个文件的方法被正确调用了。所以module.exportsvar secondFile = require('\path\secondFile') 不是一个愚蠢的问题

【问题讨论】:

  • 您究竟在哪里/如何“打印”出值?
  • 在客户端我调用这个 Parse "PFCloud" 函数。它返回一个对象(无论您在第一个函数的 response.success 中放入什么),如果出现错误,则返回一个错误。例如,在第一种方法中,如果我硬编码 response.success('yes') 而不是 response.success(res),客户端上的控制台将打印出“是”作为返回的对象
  • 在您的客户端中,既没有显示响应值也没有出现异常?
  • 没有。响应值显示的唯一时间是当我硬编码某些内容时,而不是使用回调中的 errres
  • @ChunTingLin 我假设我正确使用了回调?我复制了语法,但不确定是否应该将它传递给 null 并且只在成功调用中传递一个 res 值,以及我是否可以只在错误调用中传递第一个值(应该是错误)而逃脱第二个文件

标签: javascript parse-platform callback


【解决方案1】:

我认为你只是误用了 api

用示例样式重写它。 https://parse.com/docs/js/api/classes/Parse.Cloud.html#methods_httpRequest

    Parse.Cloud.httpRequest({
        method: 'PUT',
        url: ...,
        headers: headersForReq,
        body: bodyForReq
    }).then(function (httpResponse) {
            callback(null, 'yes'); // the hardcoded "yes" i referred to
        },
        function (httpResponse) {
            callback(httpResponse.status + httpResponse.error);
        }
    });

我认为下面也可以。

    Parse.Cloud.httpRequest({
        method: 'PUT',
        url: ...,
        headers: headersForReq,
        body: bodyForReq
    }, {
        success: function (httpResponse) {
            callback(null, 'yes'); // the hardcoded "yes" i referred to
        },
        error: function (httpResponse) {
            callback(httpResponse.status + httpResponse.error);
        }
    });

顺便说一句,如果您使用的是开源解析服务器,则可以使用 request 或 request-promise。这 2 个 npm 包被很多人使用。 (Parse.Promise 不是类 es6 的 promise)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多