解决在 alexa 中使用的承诺后返回一个值
returning a value after resolving a promise to use in alexa
我读过这个答案:How do I return the response from an asynchronous call?
我最后用了.done,还是不行。
我正在尝试 return 来自承诺的值并在承诺完成后存储它。
如果我 console.log 结果,它会起作用,但是当我尝试 return 该值时,我得到一个未决的承诺。
function getpassphrase() {
return client.getItem('user-passphrase')
.setHashKey('user','-1035827551964454856')
.selectAttributes(['user', 'passphrase'])
.execute()
.then(function (data) {
return data.result.passphrase;
})
};
const y = getpassphrase()
.done(function(r) {
return r;
//if i do console.log(r) it gives the actual result
})
console.log(y);
我也试过异步等待:
const x = (async function(){
const y = await getpassphrase();
return x
})();
我 运行 遇到了同样的问题.. x 值是这里未决的承诺..但是 console.log 给出了实际值..
预期:'abc'实际:'undefined'
这会进入我的 alexa 处理程序,当在 then 函数中使用时会抛出 'unhandled response error'
const passPhraseIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'getPassPhraseIntent';
},
handle(handlerInput) {
async function getpassphrase(){
return (await client.getItem('user-passphrase')
.setHashKey('user','-1035827551964454856')
.selectAttributes(['user', 'passphrase'])
.execute()
.then(function (data) {
return data.result.passphrase;
}));
}
(async function(){
let passphrase_db = await getpassphrase();
return handlerInput.responseBuilder
.speak(speechText2)
.getResponse();
})();
}
};
在 IIFE 中使用 async-await :
(async (){
const y = await getpassphrase();
console.log(y);
})();
您最好的选择是使用异步等待,这是处理 promises/asynchronous 功能的当前标准。
在异步函数的上下文中定义您在此处拥有的逻辑,然后使用 "await" 暂停直到承诺完成并解包值。
async function sample() {
const y = await getpassphrase();
console.log(y); //abc
}
没有办法 return 在 then 块之外或在异步函数之外的值。非常感谢大家花时间回答我的问题 :) 非常感谢..
我读过这个答案:How do I return the response from an asynchronous call?
我最后用了.done,还是不行。
我正在尝试 return 来自承诺的值并在承诺完成后存储它。
如果我 console.log 结果,它会起作用,但是当我尝试 return 该值时,我得到一个未决的承诺。
function getpassphrase() {
return client.getItem('user-passphrase')
.setHashKey('user','-1035827551964454856')
.selectAttributes(['user', 'passphrase'])
.execute()
.then(function (data) {
return data.result.passphrase;
})
};
const y = getpassphrase()
.done(function(r) {
return r;
//if i do console.log(r) it gives the actual result
})
console.log(y);
我也试过异步等待:
const x = (async function(){
const y = await getpassphrase();
return x
})();
我 运行 遇到了同样的问题.. x 值是这里未决的承诺..但是 console.log 给出了实际值..
预期:'abc'实际:'undefined'
这会进入我的 alexa 处理程序,当在 then 函数中使用时会抛出 'unhandled response error'
const passPhraseIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'getPassPhraseIntent';
},
handle(handlerInput) {
async function getpassphrase(){
return (await client.getItem('user-passphrase')
.setHashKey('user','-1035827551964454856')
.selectAttributes(['user', 'passphrase'])
.execute()
.then(function (data) {
return data.result.passphrase;
}));
}
(async function(){
let passphrase_db = await getpassphrase();
return handlerInput.responseBuilder
.speak(speechText2)
.getResponse();
})();
}
};
在 IIFE 中使用 async-await :
(async (){
const y = await getpassphrase();
console.log(y);
})();
您最好的选择是使用异步等待,这是处理 promises/asynchronous 功能的当前标准。
在异步函数的上下文中定义您在此处拥有的逻辑,然后使用 "await" 暂停直到承诺完成并解包值。
async function sample() {
const y = await getpassphrase();
console.log(y); //abc
}
没有办法 return 在 then 块之外或在异步函数之外的值。非常感谢大家花时间回答我的问题 :) 非常感谢..