将 async-await 与 node-fetch 一起使用不会 return 对调用方法的响应
Using async-await with node-fetch does not return the response to the calling method
我在一个模块中定义了一个函数,该函数应该执行获取和 return 响应。我在 return 处理获取的响应时遇到问题。调用函数将 return 值作为 "undefined".
我是 JavaScript 和 Node 的新手,所以如果您不介意,可能需要一些帮助。
调用函数
async function executeTest() {
try {
const response = await bpc.postLendingApplication(
blendConnection,
loanData
);
console.log("Response from POST Loan: ", response);
} catch (error) {
console.log(error);
}
}
执行获取请求的模块函数
const fetch = require("node-fetch");
async function postLendingApplication(connection, data) {
console.log("Processing POST Loan.");
await fetch(connection.url, {
method: "POST",
headers: connection.headers,
body: data,
}).then(async res => {
console.log("Status: ", res.status);
console.log("StatusText: ", res.statusText);
console.log("OK: ", res.ok);
return await res;
});
}
控制台输出为:
Processing POST Loan.
Status: 200
StatusText: OK
OK: true
Response from POST Loan: undefined
如您所见,提取完成了它应该做的,如果我在模块方法中记录 res.json(),它会打印有效负载。但我想 return 获取错误和响应,以便模块表现为通用方法,并且处理和错误处理在调用方法中完成。
您忘记return 形成函数。 return await fetch(connection.url, {
在 then
函数中不需要 async-await
。你可以 return res.json()
const fetch = require("node-fetch");
async function postLendingApplication(connection, data) {
console.log("Processing POST Loan.");
return await fetch(connection.url, {
method: "POST",
headers: connection.headers,
body: data,
}).then(res => {
console.log("Status: ", res.status);
console.log("StatusText: ", res.statusText);
console.log("OK: ", res.ok);
return res.json();
});
}
当您将 function
标记为 async
时,JavaScript 将始终 return 为 Promise
,从而使其成为异步的。当你 return 一个值时,它正在解析 Promise
。在这些函数内部使用 await
会“暂停”执行(从技术上讲,它正在为 await
之后出现的代码创建一个新函数),直到等待的 Promise
被解析,代替then(callback)
的用法。因此,您不需要在任何 async function
.
中使用 then
但是,您确实需要将自己的 async function
视为 Promise
。
const fetch = require("node-fetch");
async function postLendingApplication(connection, data) {
try {
console.log("Processing POST Loan.");
// the await eliminates the need for .then
const res = await fetch(connection.url, {
method: "POST",
headers: connection.headers,
body: data,
})
// this code is resumed once the fetch Promise is resolved.
// res now has a value.
console.log("Status: ", res.status);
console.log("StatusText: ", res.statusText);
return res;
}
catch(err) {
// because the promise could error, it is advised to use
// try/catch. With a Promise, you would .then(cb).catch(errHandler)
// but async/await doesn't utilize callbacks.
// perform error handling or you can bubble it up.
throw err
}
调用 postLendingApplication(connection, data)
时请确保您使用的是 await
,如果在 async function
或 postLendingApplication(connection, data).then(callback)
中,因为 return 值将是Promise
.
postLendingApplication(connection, data).then(callback).catch(errHandler)
我在一个模块中定义了一个函数,该函数应该执行获取和 return 响应。我在 return 处理获取的响应时遇到问题。调用函数将 return 值作为 "undefined".
我是 JavaScript 和 Node 的新手,所以如果您不介意,可能需要一些帮助。
调用函数
async function executeTest() {
try {
const response = await bpc.postLendingApplication(
blendConnection,
loanData
);
console.log("Response from POST Loan: ", response);
} catch (error) {
console.log(error);
}
}
执行获取请求的模块函数
const fetch = require("node-fetch");
async function postLendingApplication(connection, data) {
console.log("Processing POST Loan.");
await fetch(connection.url, {
method: "POST",
headers: connection.headers,
body: data,
}).then(async res => {
console.log("Status: ", res.status);
console.log("StatusText: ", res.statusText);
console.log("OK: ", res.ok);
return await res;
});
}
控制台输出为:
Processing POST Loan.
Status: 200
StatusText: OK
OK: true
Response from POST Loan: undefined
如您所见,提取完成了它应该做的,如果我在模块方法中记录 res.json(),它会打印有效负载。但我想 return 获取错误和响应,以便模块表现为通用方法,并且处理和错误处理在调用方法中完成。
您忘记return 形成函数。 return await fetch(connection.url, {
在 then
函数中不需要 async-await
。你可以 return res.json()
const fetch = require("node-fetch");
async function postLendingApplication(connection, data) {
console.log("Processing POST Loan.");
return await fetch(connection.url, {
method: "POST",
headers: connection.headers,
body: data,
}).then(res => {
console.log("Status: ", res.status);
console.log("StatusText: ", res.statusText);
console.log("OK: ", res.ok);
return res.json();
});
}
当您将 function
标记为 async
时,JavaScript 将始终 return 为 Promise
,从而使其成为异步的。当你 return 一个值时,它正在解析 Promise
。在这些函数内部使用 await
会“暂停”执行(从技术上讲,它正在为 await
之后出现的代码创建一个新函数),直到等待的 Promise
被解析,代替then(callback)
的用法。因此,您不需要在任何 async function
.
then
但是,您确实需要将自己的 async function
视为 Promise
。
const fetch = require("node-fetch");
async function postLendingApplication(connection, data) {
try {
console.log("Processing POST Loan.");
// the await eliminates the need for .then
const res = await fetch(connection.url, {
method: "POST",
headers: connection.headers,
body: data,
})
// this code is resumed once the fetch Promise is resolved.
// res now has a value.
console.log("Status: ", res.status);
console.log("StatusText: ", res.statusText);
return res;
}
catch(err) {
// because the promise could error, it is advised to use
// try/catch. With a Promise, you would .then(cb).catch(errHandler)
// but async/await doesn't utilize callbacks.
// perform error handling or you can bubble it up.
throw err
}
调用 postLendingApplication(connection, data)
时请确保您使用的是 await
,如果在 async function
或 postLendingApplication(connection, data).then(callback)
中,因为 return 值将是Promise
.
postLendingApplication(connection, data).then(callback).catch(errHandler)