[英]How do I wait for the API response in Node JS before executing next line
我在 node.js 中拨打 get API 需要等待响应。 回复 Alexa Skill 的 output。
const GetReportOnEmail = function (UserID, ReportName) {
return new Promise(function(resolve, reject){
var options = {
uri:'https://www.xxxxx/xx/xx',
method : 'GET'
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res = body;
resolve(res);
}
else {
res = 'Not Found';
reject(res);
}
});
})
} module.exports.GetReportOnEmail=GetReportOnEmail;
这个function我是在另一个js文件中调用的:
setTimeout(function () {
GetReportEmail.GetReportOnEmail('userID', 'ReportName').then((resp) => {
speechText = resp;
}).catch((error) => {
speechText = "some error occurred";
})
}, 20000);
-----更多代码行--------
在执行下一行代码之前,我需要等待这个 API 的响应。 我怎么做。 问候,纳文
我会使用异步/等待。
如果您在立即调用的async
function 中运行整个主程序,则可以将await
放在返回Promise
的任何 function 之前。
任何一个:
async function mainProgram() {
// do stuff
}
mainProgram();
只是
(async function () {
// do stuff
})()
你需要一个返回 promise 的sleep
function。我通常只做一个这样的:(但我确信也有地方可以导入一个)
function sleep(t) {
return new Promise(function(resolve) {
setTimeout(resolve, t);
});
};
然后 go 这样:
(async function() {
await sleep(20000);
const speechText = await GetReportEmail.GetReportOnEmail(
'userID',
'ReportName',
).catch((error) => {
return "some error occurred";
})
console.log(speechText);
});
上面的混合和匹配 then/catch 和 async/await。 你也可以这样做:
(async function() {
await sleep(20000);
let speechText;
try {
speechText = await GetReportEmail.GetReportOnEmail(
'userID',
'ReportName',
)
} catch (e) {
speechText = "some error occurred";
}
console.log(speechText);
});
如果你不想使用异步等待
setTimeout(function () {
GetReportEmail.GetReportOnEmail(
'userID',
'ReportName',
).catch((error) => {
return "some error occurred";
}).then(function(resp) {
const speechText = resp;
// do something like
console.log(speechText);
});
}, 20000);
把你想做的事情放到then
中。
原来你设置了一个每个人都可以使用的speechTex
t 变量,但在这里我只是将值传递给下一个 then。 所以我摆脱了你拥有的then
,它只会传递它收到的相同价值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.