承诺findOneAsync变量= {"isFulfilled":false,"isRejected":false}?

Sta*_*cks 6 javascript mongoose node.js promise bluebird

利用Bluebird来支持Mongoose,我有一个Promise.map(带有一系列if/else的函数用于循环遍历数组以查看是否存在引用doc,否则创建一个..

将findOneAsync的产品分配给变量,然后将'variable._id'分配给制作中的新doc(主要承诺),控制台日志 {"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 );
Run Code Online (Sandbox Code Playgroud)

这是一个日志:

existingItem : 
{"isFulfilled":false,"isRejected":false}
existingItem._id : undefined
Run Code Online (Sandbox Code Playgroud)

为什么existingItem变量可能等待Model.Item.findOneAsync ..?

JLR*_*she 5

你的问题不是很清楚,但我问你的问题是,为什么你在检索它之后就existingItem 不会等待.

你明白如何使用承诺吗?大多数情况下,您需要使用.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 );
});
Run Code Online (Sandbox Code Playgroud)