任何想法为什么以下代码:
<script>
var access_token;
var access_token_secret;
function Login(){
img = document.getElementById('authenticate');
img.src = 'authenticate.png';
login = document.getElementById('login');
login.style.visibility="visible";
}
function cookieHandlerStep1(){
chrome.cookies.get({
url:URL_GOES_HERE,
name:'access_token'
},
function(cookie){
if(cookie){
access_token = cookie['value'];
cookieHandlerStep2();
} else{
Login();
}
});
}
function cookieHandlerStep2(){
chrome.cookies.get({
url:URL_GOES_HERE,
name:'access_token_secret'
},
function(cookie){
if(cookie){
access_token_secret = cookie['value'];
Interact();
} else{
Login();
}
});
}
function Interact(){
alert(access_token);
xhr = new XMLHttpRequest();
xhr.open("GET", URL_GOES_HERE, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
document.write(xhr.responseText);
}
}
xhr.send();
}
</script>
<body onload="cookieHandlerStep1(),cookieHandlerStep2(),Interact()">
可能会使函数不按顺序执行吗?
答案 0 :(得分:2)
他们没有按顺序开火。您已经向chrome.cookies.get
提供了回调,但不保证在其余代码之前调用这些回调。第一个函数在触发回调之前返回,接下来的两个函数(cookieHandlerStep2()
和Interact()
)被调用。
但是,在这些回调中,cookieHandlerStep1()
已经调用cookieHandlerStep2()
然后调用Interact()
- 因此我假设您onload
中实际需要的只是第一个函数启动链:
<body onload="cookieHandlerStep1()">