2017-02-04 13 views
0

私はその要求の後にXMLデータを解析して結果を出力しようとしていますが、私は結果の代わりにundefinedを得ています。複数のクラスを持つPromise bluebird

var parseUrl = 'url which returns XML as response'; 
    var request = Promise.promisify(require("request")); 
    var xml2js = Promise.promisify(require('xml2js').parseString); 
    Promise.promisifyAll([request, xml2js]); 

    request({url: parseUrl, json: true}).then(function(data){ 
     if (data.body){ 
      return data.body; 
     } else { 
      return error.throw('Failed to parse body from response'); 
     } 
    }).then(function(data){ 
     xml2js(data, function(err, result){ 
      if (!err){ 
       return result; 
      } else { 
       return error.throw('Failed to read converted body from response'); 
      } 
     }); 
    }).then(function(data){ 
     console.warn(data); 
    }).catch(function(e){ 
     console.log(e.message); 
    }); 
+0

を使用する必要はありません:true'のが、data.body''でXMLを期待しています。そうですか? –

+0

それはやや独創的ではないでしょう。 –

+0

あなたはpromisified 'xml2js'にコールバックを渡す必要はありません。さらに重要なことは、' then'コールバックから結果の約束を '返す '必要があることです! – Bergi

答えて

1

1)xml2jsはすでにpromisifiationしているためです。

2)あなたは `指定JSON Promise.promisifyAll

var parseUrl = 'url which returns XML as response'; 
var request = Promise.promisify(require("request")); 
var xml2js = Promise.promisify(require('xml2js').parseString); 

request({url: parseUrl, json: true}) 
    .then(function(data){ 
    if (data.body){ 
     return data.body; 
    } else { 
     return error.throw('Failed to parse body from response'); 
    } 
}).then(xml2js) 
    .then(function(data){ 
    console.warn(data); 
}).catch(function(e){ 
    console.log(e.message); 
}); 
+1

意図的なのか分かりませんが、これを 'request(...) 'に簡略化できることを指摘したいのですが、then(xml2js).then(console.warn).catch(function(e){console.logメッセージ);}); ' –

+0

@ダニエルBあなたは大丈夫です、ありがとうございます。 –

関連する問題