我的角度项目和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' }
请问任何建议?
答案 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,你实际上只是复制那个。