node.js - 如何处理异步 NodeJS 应用程序上的错误

标签 node.js asynchronous

我已经从 PHP 迁移到 NodeJS,我喜欢它。例如,我正在使用 MySQL,运行的查询(异步事件)越多,代码就会变得越困惑:

db.execute("SQL query", [params], (err, rows) => {
    if(err) {
        console.log("error happened");
    }
    else {
        db.execute("other query", [params], (err, rows) => {
            if(err) {
                console.log("another error happened");
            }
            else {
                console.log("success");
            }
        });
    }
});

按照我的编码风格,一个查询相当于 7 行以上的代码,我认为这太多了。 你们如何处理这种代码?你们是否使用某种全局“错误”事件,当任何查询失败并且您只是假设代码中的所有内容之前都已正常运行时,该事件就会触发至此。我在想这样的事情:

function onError() {
    console.log("an error happened");
}

db.execute("SQL query", [params], (onError, rows) => {
    db.execute("other query", [params], (onError, rows) => {
        console.log("success");
    });
});

最佳答案

Promises(查看 ES6 Promises 或查找 Bluebird 包)就是答案。你只需将它们一个接一个地链接起来,这是我喜欢的事情之一——不再有“如果(错误)”。您定义 Catch 方法,在其中捕获错误。一次捕获就足以完成整个查询链。

关于node.js - 如何处理异步 NodeJS 应用程序上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966118/

相关文章:

javascript - 从 JSON 比较中排除丢失的键

node.js - Socket.IO 连接用户数

javascript - Node js 请求 promise 、抓取

sockets - D 中的异步套接字

python - 非阻塞扭曲 xmlrpc

javascript - 尚未为上下文加载模块

javascript - 如何在测试值或子对象之前测试父对象的存在

javascript - 如何使用 Bluebird.js nodeify 将第三个参数传递给回调

Java:异步将对象序列化到文件

python - 为什么 async pysnmp 这么慢?