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