简体   繁体   中英

seed.js - Kriskowal Q won't resolve promise? Why?

I have a problem with my angular project and seed.js. I've prepared date, but i have a relationship in my data between Category and Product. I need to get created Category object, so i wrote a function:

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

but I'm getting:

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

Any advice please?

If you resolve a promise with another promise, the first one stays in the pending state until the second one resolves. But don't worry, it is attached, and you can make sure by using the then function to subscribe to the promise resolution:

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

By the way, I don't see a reason why to do this. MongooseJS's exec function already returns a standard promise , you esentially just copy that one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM