【问题标题】:typescript unhandledRejection Promisetypescript unhandledRejection Promise
【发布时间】:2020-03-21 14:43:18
【问题描述】:

我使用 typescript 调用外部进程,如下所示:

import { execSync } from 'child_process'
execSync('/my/executable/here')

但可执行文件中存在错误,导致 execSync 失败。有没有办法捕获错误(作为字符串)并将其打印或分配给变量?

我试过这样做,但代码仍然说“unhandledRejection Promise”

let promise = new Promise((resolve, reject) => {
    execSync('/my/executable/here')
})
promise.then(result => console.log('CALL RAN'))
promise.catch(error => console.log('FOUND ERROR'))

我得到的错误如下所示:

2019-11-26T00:17:23.060 ERROR (pid:36622) [server] - unhandledRejection  Promise {
  <rejected> Error: Command failed: /my/executable/here

【问题讨论】:

    标签: typescript promise


    【解决方案1】:

    您需要捕获错误,然后酌情解决/拒绝。

    例如

    // Try to use const where possible
    const promise = new Promise((resolve, reject) => {
      try {  
        execSync('/my/executable/here');
        resolve();
      } catch(e) {
        reject(e);
      }
    })
    
    // Chain the promise handlers
    promise
      .then(result => console.log('CALL RAN'))
      .catch(error => console.log('FOUND ERROR'));
    

    【讨论】:

    • 我认为这成功了。谢谢!我仍然从调用此代码的服务器收到错误(在这种情况下,coc.nvim (github.com/neoclide/coc.nvim)。我可能不得不与维护人员讨论它。但从理论上讲,这应该完全消除错误root,对吗?如果您知道为什么我仍然会从服务器收到问题,我会很高兴听到您的想法。
    • 如果调用是完全同步的,那么这应该捕获它抛出的任何异常。如果他们产生另一个进程和/或在内部使用类似setTimeout 的东西,可能会出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2018-02-25
    • 2019-10-07
    • 2016-12-29
    • 2019-12-19
    • 2017-02-13
    相关资源
    最近更新 更多