利用Bluebird来实现Promisfy Mongoose ,我有一个Promise.map(函数,带有一系列if / else,用于遍历数组以查看引用文档是否存在,否则创建一个。

将findOneAsync的产品分配给变量,然后将'variable._id'分配给正在创建的新文档(主要 promise ),控制台将记录{"isFulfilled":false,"isRejected":false}
这是一个片段:

for (i=0; i<items.length; i++) {
    var existingItem = Models.Items.findOneAsync({ item: items[i] });
    console.log( "existingItem : ");
    console.log( JSON.stringify(existingItem) );
    console.log( "existingItem._id : " + existingItem._id );

这是一条日志:
existingItem :
{"isFulfilled":false,"isRejected":false}
existingItem._id : undefined

为什么existingItem变量可能在Model.Item.findOneAsync ..中挂起?

最佳答案

您的问题并不十分清楚,但是我想问的是,为什么existingItem在检索后不立即挂起。

您了解如何使用 promise 吗?大多数时候,您需要使用.then()或其他promise操作函数来获得其解析值:

var existingItem = Models.Items.findOneAsync({ item: items[i] });
existingItem.then(function (value) {
    console.log( "existingItem : ");
    console.log( JSON.stringify(existingItem) );
    console.log( JSON.stringify(value); );
    console.log( "existingItem._id : " + existingItem._id );
});

07-24 09:24