2017-01-10 2 views
0

sails.js 프레임 워크에서 node.js와 async를 사용하고 있습니다. 데이터 배열에서 일부 비동기 DB 작업을 수행하는 함수를 만들려고하지만 비동기 결과를 부모 함수로 반환하는 간단한 방법을 찾는 데 문제가 있습니다.다른 함수에서 비동기 사용

convertProductfields: function (articlesFromAurelia){ 

    async.each(articlesFromAurelia, function (post, cb) { 
     Categories.find({name: post.Categoria}) 
     .then(function(category){ 

      post.cat_id = category[0].cat_id;    
      cb(); 
     }) 
     .fail(function(error){ 
      cb(error); 
     }) 
    }, function(error){ 
     if(error) return res.negotiate(error); 

     sails.log.debug('articlesFromAureliaModified ' , articlesFromAurelia); 
     return articlesFromAurelia; 
    }); 

    sails.log.debug('articlesFromAureliaNotModified ' , articlesFromAurelia); 
    return articlesFromAurelia; 
} 

과정의 문제는 코드의 실행 순서입니다 : 다음은 내 코드입니다. 비동기 작업의 결과를 사용할 수있을 때 내 함수가 이미 반환되었습니다 .... 어떻게 작동하게 할 수 있습니까? 감사!!

+0

제거 마지막 두 행. 'convertProductfields'에 콜백을 전달합니다. –

답변

1

노드 6.0을 사용하면 빌드 된 약속을 사용할 수 있습니다.

convertProductfields: function (articlesFromAurelia){ 

    var allPromises = articlesFromAurelia 
         .map(post => new Promise((resolve, reject) => { 
           Categories.find({name: post.Categoria}) 
           .then((category) => resolve(category)) 
           .fail((error) => reject(error)) 
           })); 
    return Promise.all(allPromises); 
} 

그리고 위의 기능을 사용하려면,

convertProductfields(articlesFromAurelia) 
    .then(() =>{ 
     //handle success 
    }).catch(() => { 
     //handle error 
    }) 
0

희망이 있으면 도움이됩니다.

convertProductfields: function (articlesFromAurelia, callback){ 

    async.each(articlesFromAurelia, function (post, cb) { 
    Categories.find({name: post.Categoria}) 
     .then(function(category){ 
     post.cat_id = category[0].cat_id; 
     cb(); 
     }) 
     .fail(function(error){ 
     cb(error); 
     }) 
    }, function(error){ 
    if(error) 
     return callback(null); //incase of error, return null 

    sails.log.debug('articlesFromAureliaModified ' , articlesFromAurelia); 
    return callback(articlesFromAurelia); //return updated articles 
    }); 
} 
관련 문제