在运行这个IBM函数时,我遇到了一些问题:
/**
*
* main() will be run when you invoke this action
*
* @param Cloud Functions actions accept a single parameter, which must be a JSON object.
*
* @return The output of this action, which must be a JSON object.
*
*/
function main(params) {
const https = require('https');
https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
let data = '';
// A chunk of data has been recieved.
resp.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log(JSON.parse(data).explanation);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}我的问题是,这个函数的第一个调用(至少前3-4)不会产生输出。随后的调用运行正常,日志显示正确。我怎样才能解决这种不可预测的行为呢?当然,我想在这个函数的第一次调用时检索我的数据。谢谢。
发布于 2019-02-19 18:24:14
Node.js使用非阻塞异步编程模型.这个main函数在HTTP可用之前返回。
返回承诺将允许您等待HTTP响应。
function main(params) {
return new Promise((resolve, reject) => {
const https = require('https');
https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
let data = '';
// A chunk of data has been recieved.
resp.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
const explanation = JSON.parse(data).explanation
console.log(explanation);
resolve({ explanation })
});
}).on("error", (err) => {
console.log("Error: " + err.message);
reject({ error: err.message })
});
})
}发布于 2020-07-04 16:34:13
另外还有两件事要检查:
.json附加到您的端点https://<ibm-domain>/api/v1/web/<username>/default/<function>.jsonEnable as Web Action侧边栏菜单中选择Endpoints。另外,您应该能够返回一个async主函数来代替Promise对象。
async function main(params) {
try {
// some `await` function
} catch (e) {
// catch `await` errors
}
}
module.exports = main;https://stackoverflow.com/questions/54764871
复制相似问题