【发布时间】:2021-03-07 21:18:28
【问题描述】:
我希望包装函数返回 .then 里面的值,这样我以后可以使用它。
我有以下代码,其中我首先有一个返回承诺的请求函数,然后我有一个位于它周围并调用请求函数的 statusCurrent 函数包装器。我能够在请求的 .then 中获取值,但我需要在状态 Current 函数中返回它。我尝试了很多解决方案,但都被卡住了。
这是我正在安慰我被困在的数据的最后。
这是我的代码。我对 Promise 不是很熟悉,因此我们将不胜感激。
function request(opts) {
return new Promise(function (resolve, reject) {
https
.request(opts, function (res) {
res.pipe(process.stdout);
res.setEncoding("utf8");
let body = "";
res.on("data", (chunk) => (body += chunk));
res.on("end", () => {
//console.log("test1")
//console.log(body);
let json = JSON.parse(body);
test = json.state;
//console.log("test")
resolve(json.state);
});
})
.end(opts.body || "");
});
}
function statusCurrent() {
return new Promise(function (resolve, reject) {
request(
aws4.sign(
{
hostname: "-ats.iot.us-east-1.amazonaws.com",
service: "iotdata",
region: "us-east-1",
method: "GET",
path: "/things/esp8266_7F3B95/shadow",
headers: {
"Content-Type": "application/json0",
},
},
{
secretAccessKey: "",
accessKeyId: "",
}
)
).then(function (val) {
//console.log("val")
//console.log(val)
// THIS CONSOLES THE VALUE CORRECTLY
resolve(val);
});
});
}
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "LaunchRequest";
},
handle(handlerInput) {
const speakOutput = `You're current status is`;
statusCurrent().then(function (data) {
console.log(data);
//THIS CURRENTLY CONSOLES NOTHING
console.log("data");
});
return handlerInput.responseBuilder.speak(speakOutput).getResponse();
},
};
【问题讨论】:
-
我知道这不是一个有用的答案,但 request 已被弃用,考虑使用原生处理 promise 的包,我建议得到:npmjs.com/package/got 而不是 request。
-
好的,我肯定会考虑搬家,但我想先让我的功能发挥作用,我不觉得我离得很远。
-
是否有办法使用 aws4 iam 身份验证。你知道一个最小的例子吗?一开始工作就很头疼
标签: javascript asynchronous https promise return