基本的JavaScript线程

时间:2018-06-23 16:51:25

标签: javascript multithreading

因此,我正在处理需要一个名为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()函数,并没有帮助。从谷歌那里我看到浏览器只有一个线程,并且我计划将来将正在开发的项目移至移动设备。那么,当我在移动版本上工作时,有没有可以实施的解决方案,或者我可以以某种方式在此处修复它?谢谢!

1 个答案:

答案 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”,对吗?不完全是。