ここで私は約束に頭を回そうとしています。最初のリクエストで一連のリンクをフェッチします。次のリクエストで最初のリンクのコンテンツをフェッチしますが、次のプロミスオブジェクトを返す前に遅延を作りたいので、 setTimeout on it。しかし、次のJSONエラー(without setTimeout() it works just fine
)が表示されます
SyntaxError:JSON.parse:JSONデータの1行1列目の予期しない文字
なぜ失敗するのか知りたいのですが?
let globalObj={};
function getLinks(url){
return new Promise(function(resolve,reject){
let http = new XMLHttpRequest();
http.onreadystatechange = function(){
if(http.readyState == 4){
if(http.status == 200){
resolve(http.response);
}else{
reject(new Error());
}
}
}
http.open("GET",url,true);
http.send();
});
}
getLinks('links.txt').then(function(links){
let all_links = (JSON.parse(links));
globalObj=all_links;
return getLinks(globalObj["one"]+".txt");
}).then(function(topic){
writeToBody(topic);
setTimeout(function(){
return getLinks(globalObj["two"]+".txt"); // without setTimeout it works fine
},1000);
});
どこに
—
Bergi
JSON.parse
投げますか?setTimeout
1つのthen
コールバックがあるかどうかが前のthen
コールバックの呼び出しに影響を与えるとは信じがたいです。
return
は関数固有であり、親関数にのみ戻ります。また、非同期メソッドから戻ることはできません。