I'm having lots of trouble combining a for loop with promises. In essence, my workflow is:
- Take an array of
Artistobjects in Node.js, and grab their biographies and IDs using Mongoose. - Use their IDs to get all the artwork (more specifically, all the artwork keywords) created by that artist.
- Train them in a natural language processor classifier (this part
isn't super relevant- just know that I need to have access to
biographyandkeywordswithin the same outer scope.
However, I can't seem to use the bioText object inside the Mongoose promise, and I can't seem to return the keywords from the Mongoose promise.
if (!isBlank(bioText) && bioText){
bioText = artist.BIO;
artworkIdArray.forEach((id)=> {
console.log(bioText) // <- prints correct values
var getKey = function(){
var words = Artwork.findById(id).then((artwork)=>{
console.log(bioText) // <- empty string
if(artwork.artworkKeywords.length > 0){
keywords = artwork.artistKeywords;
return keywords;
}
}
)
return words;
}
t=getKey();
t.then((t)=>{
console.log(t); // <--- always undefined
})
}, this);
}
As you can see, I try to console.log() after exiting the promise, but the t object is always undefined.
Additionally,
I know that in my example bioText is available right up until the Mongoose find() promise. But I also don't know how to inject bioText into the promise (because then I could simply just train the classifier inside the then() statement.
So my post is basically two questions:
- Can Promises use outside variables inside
then()? - How do I return a variable declared inside
then()so it is available in the outer scope?