Search code examples
javascriptnode.jsmongoosepromisebluebird

Promise findOneAsync variable = {"isFulfilled":false,"isRejected":false}?


Utilizing Bluebird to Promisfy Mongoose, I have a Promise.map(function with a series of if/else for looping through an array to see if a reference doc exists, else create one..

Assigning the product of findOneAsync to a variable, to then assign 'variable._id' to a new doc in the making (the main promise), the console logs {"isFulfilled":false,"isRejected":false}

Here's a snippet:

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 );

Here's a log:

existingItem : 
{"isFulfilled":false,"isRejected":false}
existingItem._id : undefined

Why might the existingItem variable be pending for the Model.Item.findOneAsync..?


Solution

  • Your question is not really clear, but my question to you would be: why would existingItem not be pending right after you retrieved it?

    Do you understand how to use promises? Most of the time you need to get at their resolved values using .then() or other promise manipulation functions:

    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 );
    });