我不是很習慣nodejs/javascript中的Promise,基本上我希望我的控制器只有在我的承諾完成運行後才返回一個值。Sails.js控制器等待異步服務方法
我在我的Sails應用程序中有以下服務。我正在使用請求承諾模塊向facebook圖形API發出HTTP請求。
return http(options).then(function(data){
var res = JSON.parse(data);
if(!res || res.error) {
console.log(!res ? 'error occurred while loading photos' : res.error);
return;
}
for (var photoIndex in res.data) {
var photo = res.data[photoIndex];
if (photo.tags) {
for(var tagIndex in photo.tags.data){
var tag = photo.tags.data[tagIndex];
console.log('TAG_ID: '+tag.id + ' -> TARGET_ID: ' + target);
if (tag.id == target) {
photos.push(photo);
}
}
}
}
if (res.paging && res.paging.next) {
console.log('recursion in action!!');
myself(id, target, accessToken, decodeURIComponent(res.paging.next));
}
我的控制器:
var countPhotos = Facebook.countTaggedPhotos(requesterId, targetId, accessToken).then(function(photos){
return res.json({photos: photos.length}); \t \t \t
});
不過控制器返回0,我的服務承諾結束前,當我看向日誌我可以看到它仍在執行循環。
我怎麼才能讓我的控制器等待一切結束纔回來,我以爲是.then()
工作。