seed.js - Kriskowal Q不会解决承诺?为什么?

时间:2015-11-19 19:04:47

标签: javascript angularjs q

我的角度项目和seed.js有问题。我已经准备好了约会,但我的类别和产品之间的数据有关系。我需要创建一个Category对象,所以我写了一个函数:

function getCategory(name) {
  var deferred = q.defer();
  var promise = Category.findOne({'name': name}).exec();
  deferred.resolve(promise);
  console.log(promise);
  console.log(deferred.promise);
}

但我得到了:

Promise {
  emitter: 
   EventEmitter {
     domain: null,
     _events: {},
     _eventsCount: 0,
     _maxListeners: undefined },
  emitted: {},
  ended: false }
{ state: 'pending' }

请问任何建议?

1 个答案:

答案 0 :(得分:0)

如果您使用其他承诺解决承诺,则第一个承诺将保持挂起状态,直到第二个承诺结算。 但是不要担心,它是附加的,您可以通过使用then函数来订阅承诺解析:

var deferred = Q.defer();

// var promise = Category.findOne({'name': name}).exec();
var promise = new Promise(resolve => { // imitating an asynchronous task, like exec()
  setTimeout(() => resolve('#1'), 1);
});
deferred.resolve(promise);

console.log(promise); // logs: Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
console.log(deferred.promise.inspect()); // logs: Object {state: "pending"}
deferred.promise.then(x => { console.log(x); }, e => { console.error(e); }); // Prints "#1" after the promise resolves

顺便说一句,我没有看到为什么这样做的原因。 MongooseJS's exec function already returns a standard promise,你实际上只是复制那个。