尝试让 Javascript 函数同步运行

Posted

技术标签:

【中文标题】尝试让 Javascript 函数同步运行【英文标题】:Try to get Javascript functions to run Synchronously 【发布时间】:2014-11-07 02:57:33 【问题描述】:

我在使用以下代码 sn-p 时遇到问题。我的 init 方法需要运行并完成 getLocation() 函数,然后 initializeMapp() 和 geoListen() 才能运行。我将 rsvp.js 链接为资源,但不太确定如何实现。我还尝试了 jQuery $when.done 方法。任何帮助表示赞赏。

jQuery 方法:

//initial page load method
function init() 

    //get user location then builds map and listens to database
    $.when(getLocation()).done.(function () 

       //build map now that you have user location
        initializeMap();

       //Starts listening to database changes
       geoListen();

    )


回复方式:

 //initial page load method
 function init() 

      //get user location then builds map and listens to database
     getLocation().then(function () 

     //build map now that you have user location
     initializeMap();

     //Starts listening to database changes
     geoListen();

  )

    

【问题讨论】:

运行这些代码 sn-ps 时究竟发生了什么? getLocation() 返回什么? getLocation 是否返回承诺? 【参考方案1】:

您可以让您的getLocation 函数接受回调并在getLocation 完成时执行它们

getLocation = function(cb1, cb2) 
  // when done 
  cb1()
  cb2()


function init() 
  getLocation(initializeMap, geoListen)

或者你可以传递一个回调引用数组并在getLocation中循环它们并调用它们

您也可以使用 Q.js 并从 getLocation 返回一个承诺

【讨论】:

如果 getLocation 返回一个承诺,则不需要这样做。

以上是关于尝试让 Javascript 函数同步运行的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 同步与异步

JavaScript的运行机制

如何在 javascript 中同步异步映射函数

进阶学习5:JavaScript异步编程——同步模式异步模式调用栈工作线程消息队列事件循环回调函数

PURE Javascript 是同步的还是异步的?

是否可以运行JavaScript(NodeJS)命令/函数,如果出现错误,让程序继续运行?