2016-05-30 52 views
0
var shortLinks = []; 

Link.find({}, function (err, links) { 

    if (err) { 
     console.log(err); 

    } else { 

     links.map(link => { 
      shortLinks.push(link.shortLink); 
     }); 

    } 
    console.log(shortLinks);//shortLinks has values, all okey 
}); 

console.log(shortLinks); //shortLinks is empty 

我需要在Link.find({})之後使用shortLinks,但數組爲空。 需要返回短鏈接。如何在collection.find中返回值({})

+0

的[?我如何返回從一個異步調用的響應(可能的複製http://stackoverflow.com/questions/14220321/how -do -i-return-the-an-asynchronous-call) – Soren

+0

在你的查詢完成之前結果你的外部短鏈接被打印出來,因爲NodeJs是異步的,它不會等待查詢完成。所以你得到空的結果。 –

回答

0

需要使用承諾:

const shortLinks = []; 

const getShortLinks = Link.find({}, function (err, links) { 

    if (err) { 
     console.log(err); 

    } else { 

     links.map(link => { 
      shortLinks.push(link.shortLink); 
     }); 

    } 
}); 

getShortLinks.then(function(links){ 
    console.log(shortLinks); 
}, function(err){ 
    console.log(err); 
}); 
+0

你不需要使用'promise'。它是問題的解決方案,也是回調結構的抽象。如果你不瞭解回調,那麼你會有一段糟糕的時光。 – Russbear