在Javascript中完成单独的函数之前,请等待异步回调完成
如果这是一个重复,我很抱歉,但我能找到的只是帮助让函数完成或无关语言,而不是之后要做什么。无论如何 我还有另外两个相互关联的函数。一个调用nameyapi,它在回调中返回一个随机名称,我使用它来更新元素。这是我的randomizePANameListeners函数 我的第二个函数从这两个元素中获取名字和姓氏,并使用它们创建一个随机用户名。这是我的randomizeAppNameListeners在Javascript中完成单独的函数之前,请等待异步回调完成,javascript,asynchronous,Javascript,Asynchronous,如果这是一个重复,我很抱歉,但我能找到的只是帮助让函数完成或无关语言,而不是之后要做什么。无论如何 我还有另外两个相互关联的函数。一个调用nameyapi,它在回调中返回一个随机名称,我使用它来更新元素。这是我的randomizePANameListeners函数 我的第二个函数从这两个元素中获取名字和姓氏,并使用它们创建一个随机用户名。这是我的randomizeAppNameListeners randomizePANameButton.addEventListener("click", fu
randomizePANameButton.addEventListener("click", function(e) {
// Check the gender of the PA
var isChecked = document.getElementById("gender56").checked;
// Use a self-invoking function to make sure the names are
// updated correctly
(function() {
if (isChecked === true) {
namey.get({ type: 'male', with_surname: 'false', frequency: 'all', callback: function(n) { document.getElementById("fName").value = n }});
} else {
namey.get({ type: 'female', with_surname: 'false', frequency: 'all', callback: function(n) { document.getElementById("fName").value = n }});
}
// Set the surname as well
namey.get({ type: 'surname', with_surname: 'false', frequency: 'all', callback: function(n) { document.getElementById("lName").value = n }});
})()
并且,附加到第二个按钮的事件侦听器:
var fName = document.getElementById("fName").value.substring(0, 3);
var lName = document.getElementById("lName").value;
var randomDigits = (Math.random() * (100 - 10) + 10).toFixed(0);
return fName + lName + ".UAT" + randomDigits;
现在,我有一个按钮,通过将所有这些事件侦听器绑定在一起,使一切变得更容易。我的easy按钮为我做了一切,但当它调用这两个时,它会使用元素中的当前值来生成随机名称,然后创建一个新的应用程序名称,而不会使用新的PA名称
那么,使用普通JavaScript,如何在完成第二个函数之前等待第一个函数完成呢?我不希望创建一个不需要的全局变量。您可以尝试使用承诺-
这应该是有效的:)是的,使用承诺,这在您的场景中完全有效,如果您使用jquery,您可以使用延迟
在本机javascript中,您可以在自己的函数中使用回调
var myFunction = function(complete) {
/* Do things here first */
complete();
}
myFunction(function(){
/* Do Something else here after the first has completed */
});
虽然这可以从理论上回答这个问题,但请在这里包括答案的基本部分,并提供链接供参考。您的评论最接近于帮助我。我本想将这两个函数的作用域分开,但最后我将函数调用放在了姓氏的回调函数中,以创建应用程序名。