0

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

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

4

1 回答 1

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

于 2015-05-28T20:29:31.620 回答