Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js承诺与mongoskin大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试避免在进行 mongodb查询时使用回调.我正在使用mongoskin来打电话:

req.db.collection('users').find().toArray(function (err,doc) {
  res.json(doc);
});

在许多情况下,我需要进行多个查询,所以我想使用Node.js promise库,但我不知道如何将这些函数包装为promises.我看到的大多数例子对于像readFile这样的事情是微不足道的,我猜这种情况下我需要以某种方式包装到Array?可以这样做,还是必须由mongoskin实现?

一个例子可以是任何一组回调,查找/插入,查找/查找/插入,查找/更新:

req.db.collection('users').find().toArray(function (err,doc) {
  if (doc) {
    req.db.collection('users').find().toArray(function (err,doc) {
      // etc...
    });
  }
  else {
    // err
  }
});

解决方法

您可以使用bluebird宣传整个模块:

var Promise = require("bluebird");
var mongoskin = require("mongoskin");
Object.keys(mongoskin).forEach(function(key) {
  var value = mongoskin[key];
  if (typeof value === "function") {
    Promise.promisifyAll(value);
    Promise.promisifyAll(value.prototype);
  }
});
Promise.promisifyAll(mongoskin);

这只需要在您的应用程序中在一个地方完成一次,而不是在应用程序代码中的任何位置.

之后,除了使用Async后缀之外,您通常只使用方法,并且不传递回调:

req.db.collection('users').find().toArrayAsync()
  .then(function(doc) {
    if (doc) {
      return req.db.collection('users').find().toArrayAsync();
    }
  })
  .then(function(doc) {
    if (doc) {
      return req.db.collection('users').find().toArrayAsync();
    }
  })
  .then(function(doc) {
    if (doc) {
      return req.db.collection('users').find().toArrayAsync();
    }
  });

所以再次,如果你调用像这样的函数

foo(a,b,c,function(err,result) {
    if (err) return console.log(err);
    //Code
});

承诺返回版本被称为:

fooAsync(a,c).then(...)

(自动记录未捕获的错误,因此如果您只是要记录它,则无需检查它们)

大佬总结

以上是大佬教程为你收集整理的Node.js承诺与mongoskin全部内容,希望文章能够帮你解决Node.js承诺与mongoskin所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: