在nodejs和couched / nano中使用promises

时间:2015-05-26 13:19:34

标签: javascript node.js couchdb q couchdb-nano

尝试将Q promises库与couchDB和Nano一起使用。我有以下代码,并且消息显示在控制台中,但未创建数据库。

var nano = require('nano')('http://localhost:5984');
var Q = require('q');

var deleteDB = function(database) {
    console.log('deleteDB');
    var deferred = Q.defer();
    nano.db.destroy('alice', deferred.resolve);
    return deferred.promise;
};

var createDB = function(database) {
    console.log('createDB');
    var deferred = Q.defer();
    nano.db.create('alice', deferred.resolve);
    return deferred.promise;
}

deleteDB('promises').then(createDB('promises'));

有谁知道为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

一个问题是then()接受一个函数作为解析promise时执行的参数。您的代码将在deleteDB之后立即执行createDB,并将生成的promise传递给then()。

另一个问题是您没有等待createDB返回的承诺来解决。

所以我觉得你想要这样的东西:

deleteDB('promises')
  .then(function () { return createDB('promises'); })
  .then(function () { console.log('All finished'); });

或者如果您更改了createDB,以便它不会接受参数

deleteDB('promises')
  .then(createDB)
  .then(function () { console.log('All finished'); });

注意createDB之后缺少()。