素材牛VIP会员
node.js里冗长的回调嵌套如何破除
 随***吧  分类:Node.js  人气:854  回帖:3  发布于6年前 收藏

这是一个mongodb官方node.js客户端里的例子

  var MongoClient = require('mongodb').MongoClient
    , format = require('util').format;    

  // Custom factory (need to provide a 12 byte array);
  CustomPKFactory = function() {}
  CustomPKFactory.prototype = new Object();
  CustomPKFactory.createPk = function() {
    return new ObjectID("aaaaaaaaaaaa");
  }

  MongoClient.connect('mongodb://127.0.0.1:27017/test', {'pkFactory':CustomPKFactory}, function(err, db) {
    if(err) throw err;

    db.dropDatabase(function(err, done) {

      db.createCollection('test_custom_key', function(err, collection) {

        collection.insert({'a':1}, function(err, docs) {

          collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}).toArray(function(err, items) {
            console.dir(items);
            // Let's close the db
            db.close();
          });
        });
      });
    });
  });

实际上在node.js里,这种例子比比皆是,因为它的特点就是事件回调,在处理高并发而且逻辑不复杂的代码时,当然是ok的。但是如果我要用它来做应用比较复杂的事情,比如上面这个,一个页面要读取一堆数据,需要我一个一个嵌套写下来简直太痛苦了,不知道node.js里有没有成熟的解决方案呢,兼顾性能和可读性。

 标签:mongondbnode.js

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv6 码匠
街***铃 JS工程师 6年前#1

有两类方案。

第一类是仅需要使用npm安装的node modules:
async
Q

第二类需要增加额外的语法糖或者需要新特性的支持:
co
wind.js

其实异步编程最重要的是组织好你的函数,每个函数都赋予清晰的名字,只要你的思路清晰,那么你的代码就不容易出错,这一点,无论异步还是同步,都恨重要。

Lv6 码匠
co***ky Linux系统工程师 6年前#2

async, promise

Lv3 码奴
默***H 学生 6年前#3

bluebird 不错

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取