因此,我正在处理需要一个名为PagePic的变量的函数,该变量在另一个名为getPage()的函数中初始化,如下所示:
function somefunc(){
getPage();
addMarker({ coords:{lat:Lat,lng:Long},iconImage:PagePic)}
}
代码中的某处:
function getPage(){
FB.api('/*******?fields=picture,events', function(response) {
PagePic = response["picture"].data.url
}
但是,getPage不能及时完成,因此调用addMarker时没有iconImage的实际值。 从完成的测试,似乎getPage仅在addMarker完成时才开始工作,但是我可能是错的。香港专业教育学院尝试了一个自定义的sleep()函数,并没有帮助。从谷歌那里我看到浏览器只有一个线程,并且我计划将来将正在开发的项目移至移动设备。那么,当我在移动版本上工作时,有没有可以实施的解决方案,或者我可以以某种方式在此处修复它?谢谢!
答案 0 :(得分:0)
Javascript不是多线程的。您处理的是异步的,不是多线程的。有许多解决方法:回调,承诺,异步。
对于基本概念,请执行以下操作(使用回调):
function cb(pagePic) {
addMarker({ coords:{lat:Lat,lng:Long},iconImage:PagePic)};
}
function someFunc() {
getPage(cb);
}
function getPage(callback){
FB.api('/*******?fields=picture,events', function(response) {
PagePic = response["picture"].data.url;
callback(PagePic);
}
编辑: 不是说getPage()没有及时完成。 正在完成。但是回调会进入事件循环,并且仅在所有同步代码完成后才执行。这是一个示例:
console.log("a");
setTimeout(console.log.bind(this, "b"), 0);
console.log("c");
0ms超时。这应该打印“ a”“ b”“ c”,对吗?不完全是。