【发布时间】:2017-01-25 02:17:00
【问题描述】:
在这里,我试图将我的头绕在 Promise 上。在第一次请求时,我会获取一组链接。在下一次请求时,我会获取第一个链接的内容。但是我想在返回下一个 Promise 对象之前进行延迟。所以我在上面使用 setTimeout 。但它给了我以下 JSON 错误 (without setTimeout() it works just fine)
SyntaxError:JSON.parse:第 1 行第 1 列出现意外字符 JSON 数据
我想知道为什么会失败?
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);
});
【问题讨论】:
-
请注意,
return是特定于函数的,并且只返回父函数,并且不能从异步方法返回。 -
请注意有much better ways 来构造此代码而不是使用
globalObj。 -
JSON.parse扔哪里了?我很难相信一个then回调中是否有setTimeout会影响上一个then回调中的调用。 -
这能回答你的问题吗? What is the JavaScript version of sleep()?
标签: javascript json promise settimeout