2

我必须在表单提交上调用两个函数,但我想确保第二个函数仅在第一个函数执行后才执行。我无法控制第一个功能,所以我根本无法编辑它。

function a(et){
   //function a script
}

 function b(evt){

 //function b script
}

from function b is there a way that i can check if function a was completed or executed fully. 
4

3 回答 3

1

如果您根本无法访问,a那么您将无法在这里做您想做的事情。没办法:JS在调用函数时创建一个调用对象,并在调用完成时自动GC。可悲的是,实际的内存管理是不受限制的,所以你无法检查。其他诡计涉及您对功能代码的干预a,您说您无法获得...所以不,您不能这样做。

对此很抱歉,但正如常见问题解答所说:您可能并不总是得到您希望的答案,但这并不意味着您不喜欢的答案不是真的...... :-P


但是,您有一点希望:如果函数ab都是提交事件的回调或处理程序,您可以研究对这些调用进行排队的方法。鉴于 jQuery 标签.queue()本身

于 2013-04-16T19:37:17.483 回答
0

Yes, you can, there is a lot of ways to do that, but here is a simple way to make it.
You can use persistent object localStorage.
You can use session object sessionStorage.

function a(evt){
   // Asynchronous function
   // ... your code here
   // before finish function create the persistent object
   localStorage.setItem('myObject', 'done');
   return;
}

function b(evt){
   // Checks if a() function was completed
   var _done = localStorage.getItem('myObject');
   if(_done && _done == 'done') {
     // your code here: the a() function was completed
     localStorage.removeItem('myObject');
   }
}
于 2013-04-16T21:13:10.940 回答
0

根据Eli Gray的说法,您可以像这样进行测试:

function foo() {
  foo.complete = false;
  // your code here
  foo.complete = true;
}
foo.complete = false;

if (foo.complete) { // foo execution complete
  // your code here
}
于 2013-04-16T19:20:36.607 回答