2016-07-15 25 views
0
exports.getOrder = function(id) { 
    return getCache(id) 
     .then(function(cache) { 
      return [ 
       getCustomer(cache.customer), 
       getInfo(cache.customer) 
      ]; 
     }) 
     .spread(mergeData) 
} 

function mergeData(a, b) { 
    return a; 
} 

拡散を使用してタイプエラーが発生する理由はありますか?両方の関数(getCustomer,getInfo)はQ.Promiseを返します。Q spread TypeError:未定義は関数ではありません

編集:

exports.getOrder = function(id) { 
    return getCache(id) 
     .then(function(cache) { 
      return Q.all([getCustomer(cache.customer),getInfo(cache.customer)]); 
     }) 
     .spread(mergeAuditData) 
} 

私も成功と同じ結果せずにこの方法をテストしています。

EDIT2:

exports.getOrder = function(id) { 
    return getCache(id) 
     .then(function(cache) { 
      return Q.all([ 
       getCustomer(cache.customer), 
       getInfo(cache.customer) 
      ]); 
     }) 
     .then(function(a) { 
      return a // contains: [[result Customer], [result Info]] 
     }) 
     .catch(function(err) { 
      console.log(err); 
     }) 
} 

EDIT3:

exports.getOrder = function(id) { 
    return getCache(id) 
     .then(function(cache) { 
      return [ 
       getCustomer(cache.customer), 
       getInfo(cache.customer) 
      ]; 
     }) 
     .spread(function(a,b) { 
      console.log(a); 
      console.log(b); 
      return a 
     }) 
     .catch(function(err) { 
      console.log(err); 
     }) 
} 

Edit4:

function getCache(id) { 
    return Cache.findOne({id:id}); 
} 

Edit5:

function getCache(id) { 
    var query = Cache.findOne({id:id}); 
    return query.exec(); 

    //return Q(11061); 
} 

答えて

0

私はテストしましたが、あなたのコードを試して置き換えることができます

module.exports.getOrder = function(id) { 
return getCache(id) 
    .then(function(cache) { 
     return [ 
      getCustomer(cache.customer), 
      getInfo(cache.customer) 
     ]; 
    }) 
    .spread(function(a,b) { 
     console.log(a); 
     console.log(b); 
     return a 
    }) 
    .catch(function(err) { 
     console.log(err); 
    }) 
} 
+0

私は別の解決策で最初の投稿を編集しました。私はあなたのことをテストし、いくつかのフィードバックを与えます。 – robert

+0

はES6の問題ですか? –

+0

興味深いことに... 'a'には両方の結果があり、' b'は未定義です。 – robert