jsとnode.jsがかなり新しくなっていますが、APIへの呼び出しと必要な情報の取得ができました。しかし、私が次の情報を入手するためにバッターIDを引き上げようとしていたとき。私は正常に動作するように未定義のエラーチェックを成功させました。しかし、私は非同期関数ですぐに何かを実行しようとしていたので、ループスルーできませんでした。私は今、各実行後に2秒の遅延で関数asyncを全部作ってみようとしていますが、次のエラーを返しています(何かが未定義であると仮定しています)JSONの位置0の予期しないトークンuが非同期のために機能しない
**注: i = 4およびp = 1の場合、値はAPIデータに存在します。しかし、私はこのコードを使用してそれらの値で開始しようとすると、このエラーが発生します。
エラー:
Unexpected token u in JSON at position 0
これは私のコードです:
request('API Info redacted',
setTimeout (function (err, response, body) {
//do stuff below
//to get the first play of the game, set i=1 and p=0
var i = 4;
var p = 1;
// ************
var boolIn = 1;
// parse the body as JSON
var parsedBody = JSON.parse(body);
var apiResults = parsedBody.apiResults;
if(typeof(apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p]) == 'undefined') {
//sets the variables to the first batter of the next inning
p=0;
i = i+1;
}
//below pulls the apiResults from the body of the API request
var sportId = apiResults.sportId;
var hitName = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].name;
var fname = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].batter.firstName;
var lname = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].batter.lastName;
var outsB = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].outs.before;
var outsA = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].outs.after;
var rbis = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].runsBattedIn;
var outDifference = (outsA - outsB);
var hitB = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].baseSituation.beforeId;
var hitA = apiResults[0].league.season.eventType[0].events[0].pbp[i].pbpDetails[p].baseSituation.afterId;
var baseDifference = (hitA - hitB);
//prints the details pulled above
res.json("First Name: " + fname + ", Last Name: " + lname + ", Hit name: " + hitName + ", Outs on the play: " + outDifference + ", Rbi's: " + rbis +
", Base Sit: " + baseDifference);
//increases the batter call
p = p+1;
//below ends the setTimeout
}, 2000));
//ended request
});
構成しているものが有効なJSON文字列ではないためです。 FYIあなたは 'res.json'にJSオブジェクトを渡すことができます。(それはあなたのためにそれを文字列化します)(https://expressjs.com/en/4x/api.html#res.json)、そうするのが簡単かもしれませんあなたの場合。 – George
@ George私はそれを非同期的に変更する前に、この変更を印刷したときに何が起こったでしょうか? 1回の実行でpとiの値を実行したときに、エラーなしで意図したとおりに印刷されたため – dgelinas21