解决在 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 块之外或在异步函数之外的值。非常感谢大家花时间回答我的问题 :) 非常感谢..