(节点:2256)UnhandledPromiseRejectionWarning:未处理的承诺被拒绝

时间:2020-08-03 10:46:23

标签: javascript node.js

我想使whatapp机器人聪明地使用nodejs。我想添加一个参数。我的代码是这样的:

                case 'brainly':
                const args = process.argv
                    brainly(args).then(res => {
                        for(var i=0; i<res.length; i++){
                        var jawab = res[i].jawaban
                        client.sendText(from, jawab[0].text)
                        }
                    })
                break

但是,当我运行它时,会显示如下错误:

(节点:7960)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未使用.catch()处理的诺言而引起的。

该如何解决?请帮助我。

1 个答案:

答案 0 :(得分:2)

这意味着在异步上下文中的某个位置(很可能在调用brainly(args)所创建的承诺中)发生了错误,并且没有捕获并处理该错误。

要开始使用异步Javascript,我建议您找到有关Javascript Promises和Async Functions(隐式生成Promise,并允许使用await语法)的articles

没有真正简单的方法可以解释。 Javascript是一种单线程语言,但是通过使用回调,promise和async / await语法(它们都源自回调),它提供了很大的并发性。诸如网络/磁盘操作之类的并非瞬间发生的事物都是异步,必须以适当的方式进行处理。对于新手来说,这可能会造成混乱,因为它破坏了线性的异步执行流程。

Promise是可以创建的对象,将来会解决拒绝。通过在promise上调用.then,可以为它提供一个回调函数,该函数将在最终到达时使用已解析的值进行调用。您还应该在末尾添加.catch(err => { ... })处理程序以处理错误,这可能是由于传递参数而由于某种原因而抛出的。