2016-11-20 2 views
1

データを取得するという約束を返す次の関数があります。私はrequest npmモジュールを使用しています。npmリクエストパッケージで全身になっていない

SyntaxError: Unexpected token u in JSON at position 0 

私の体は未定義として返されたときに起こります。私は私の約束を解決するとき

let getData = function (user) { 

    return new Promise(function (resolve, reject) { 

     let url = 'https://someurl.com/' + user; 

     request(url, function (error, res, body) { 
      if (error) reject(error); 
      try{ 
       resolve(cleanData(JSON.parse(body).items)) 
      }catch(e){ 
       console.log(body) 
       console.log(url) 
       console.log(e); 
      } 
     }) 

    }) 
} 

、私は時々このような何かを得ます。しかし、他の時間、私はまた、このような何かを得る:

SyntaxError: Unexpected token f in JSON at position 11203 

そして、他の回(回のほとんどを)、それは完全に通過します。

私はデバッグ中にこれを二重チェックすることができましたが、不完全なボディを取得することがあるようです。私は、ソースURLの本文が不完全ではないという事実を知っています。私はブラウザで直接URLに行き、jsonが完全で有効であることを確認してこれを確認しました。

何が起こっていますか? request関数のコールバックは、レスポンスを使用する準備ができている場合にのみコールされることを理解しています。

答えて

0

いいえ - 応答があるとすぐにコールバックがトリガーされます。 HTTP request API documentationを参照してください。応答リスナーを実装する必要があります。

res.on('data', (chunk) => { 
    // do the data accumulation here 
    }); 
    res.on('end',() => { 
    // do the resolve here 
    }); 
関連する問題