我试图从函数中返回服务响应,但是函数在服务执行结束之前返回值,因此我总是得到一个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(如果不是完全匹配)
我想在我的代码中的其他地方使用此详细信息。
答案 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