尝试将Q Promise库与bedDB和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'));


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

最佳答案

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

另一个问题是您不等待createDB返回的promise解决。

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

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之后缺少()。

09-20 22:26