2

我刚刚开始第一次使用 javascript。通过谷歌搜索,我只能找到通过您编写的函数处理承诺拒绝的示例。我的问题是

app.getInput("key");

不是我写的。我希望能够在我的代码中处理被拒绝的承诺。我的大脑目前无法“获取 javascript”。

我有这个功能(在jovo框架中)

var content = app.getInput('content');

我收到错误“TypeError:无法读取未定义的属性‘内容’”。我知道为什么会出现此错误,我只是希望能够处理没有内容的情况。

它还说“UnhandledPromiseRejectionWarning:未处理的承诺拒绝”

我只是希望能够写出类似的东西

var content = "null";

content = testFunc().then(() => {
    console.log('resolved content!');
}).catch((err) => {
    console.log('error content');
    content = "null";
});

function testFunc(){
    return app.getInput('content');
}
4

3 回答 3

1

非异步方法以这种方式返回错误很奇怪。无论如何,现在如何处理它


用 try/catch 包裹它

let content;

try {
   content = app.getInput('content');

   // All is ok there

   ...
} catch (err) {
  ...
}


@加布里埃尔布鲁

function a() {
  throw new Error('Error');
}

async function testFunc() {
  try {
    const content = a();
    
    console.log('No error');
    
    return content;
  } catch(err) {
    console.log('Error');
  
    return null;
  }
}

testFunc();

于 2017-11-23T13:10:40.860 回答
0

处理 Promise 的最简单方法是使用async/await

async function testFunc() {
  try {
    const content = await app.getInput('content');
    return content;
  } catch(err) {
    return null;
  }
}
于 2017-11-23T13:25:25.483 回答
0

根据您的描述和jovo docs,我知道这getInput()是一种同步方法。错误TypeError: Cannot read property 'content' of undefined被抛出给调用者(你的代码)。看起来框架没有正确初始化,这undefined让我相信。

如前所述Grégory NEUT,您使用try/catch块来处理它。

try {
  content = app.getInput('content');

  // All is ok there
} catch (err) {
  // content is unavailable, inspect the error
}

另一个问题"UnhandledPromiseRejectionWarning: Unhandled promise rejection"发生在 promise 被拒绝且未被捕获时。也许try/catch会解决这个问题,但也许不会。事实是,当您调用testFunc()并且它失败时,它不会返回被拒绝的承诺,因此它不会.then()像您预期的那样具有方法。Gabriel Bleu解决方案将确保您在任何情况下都能获得承诺。

于 2017-11-23T13:32:27.640 回答