我正在尝试从函数内部返回服务响应,但是该函数在服务执行结束之前返回值,因此我总是得到一个空值作为回报。
我尝试使用回调,但不起作用,尽管我没有尝试过承诺。我可以在另一个函数中使用它们吗?
我的代码片段:
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(如果不是完全匹配(
我想在我的代码中的其他地方使用此详细信息。
使用承诺:
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);
});
})
}
您正在尝试返回异步结果。尝试使用 Promise 在值到达时返回值。看这里: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
希望这对;)有所帮助
回调是异步的...所以return result
将在apiRequest
内的任何内容之前执行,这就是result == null
.尝试使用 async/await 作为替代方法。更多关于这一点