在NodeJs

时间:2018-03-10 17:17:07

标签: javascript node.js rest

我试图从函数中返回服务响应,但是函数在服务执行结束之前返回值,因此我总是得到一个null值。

我尝试使用回调,但没有工作,虽然我没有尝试过承诺。我可以在其他功能中使用它们吗?

我的代码段:

    function getBoonInfoByISisbn(isbn, jsonString) {

    var result = null;

    var requestURL = domainURL + "getbkinfbyisisbn?isbn=" + isbn;
    mongoClient.registerMethod("getbkinfbyisisbn", requestURL, "GET");

    var args = {
        // data: {
        //     isbn:isbn
        // },
        headers: { "Content-Type": "application/json" }

    };

    var apiRequest = mongoClient.methods.getbkinfbyisisbn(args, function (data, response) {
        // console.log(data); - getting data output on console
        result = data; /*this has data*/
    });

    return result; /*this is always null*/
}

此服务返回单个JSON对象(如果完全匹配)或null(如果不是完全匹配)

我想在我的代码中的其他地方使用此详细信息。

3 个答案:

答案 0 :(得分:2)

使用承诺:

function getBoonInfoByISisbn(isbn, jsonString) {
    return new Promise((resolve, reject) => {
        let requestURL = `${domainURL}getbkinfbyisisbn?isbn=${isbn}`;
        mongoClient.registerMethod("getbkinfbyisisbn", requestURL, "GET");
        let args = {
            headers: {
                "Content-Type": "application/json"
            }
        };
        mongoClient.methods.getbkinfbyisisbn(args, (data, response) => {
            resolve(data);
        });
    })
}

答案 1 :(得分:0)

您正在尝试返回异步结果。尝试使用Promise在值到达时返回值。见这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

希望这会有所帮助;)

答案 2 :(得分:0)

回调是异步的...因此identify -verbose -define identify:moments x.png 将在I1: 0.0017694 (0.451197) I2: 3.22345e-07 (0.0209605) I3: 2.88038e-10 (0.00477606) I4: 3.93968e-12 (6.53253e-05) I5: 1.2326e-22 (3.38892e-08) I6: -1.94034e-15 (-8.20426e-06) I7: -4.91938e-23 (-1.35254e-08) I8: 5.56374e-16 (2.35249e-06) Channel perceptual hash: Red, Hue: PH1: 0.407586, 0.690687 PH2: 1.88394, 2.91999 PH3: 2.36028, 3.96979 PH4: 5.36184, 5.3591 PH5: 9.25849, 11 PH6: 6.30422, 6.93025 PH7: 9.6332, 10.0241 Green, Chroma: PH1: 0.293148, -0.0406998 PH2: 1.49146, 2.52843 PH3: 2.21568, 0.992456 PH4: 3.52683, 2.3777 PH5: 6.48291, 4.06334 PH6: 4.38149, 4.23342 PH7: 6.64322, 5.35487 Blue, Luma: PH1: 0.329865, 0.33357 PH2: 1.6461, 1.63528 PH3: 2.39206, 2.26483 PH4: 3.72747, 4.09284 PH5: 6.789, 7.36151 PH6: 4.56493, 5.0171 PH7: 7.83416, 7.50669 内的任何内容之前执行,这就是return result的原因。尝试使用async / await作为替代方案。有关here

的更多信息