出于我的目的,我一直无法找到一个简单的JavaScript回调模式示例,回答以下问题将非常有帮助。
假设我有2个函数,每个函数显示一个警报:
function hello1() {
setTimeout(function(){
alert("hello1");
}, 500);
}
function hello2() {
alert("hello2");
}
如果我正在使用此功能,
function saythehellos()
{
hello1();
hello2();
}
首先显示警报“ hello2”,然后显示警报“ hello1”
如何使用回调模式更改功能saythehellos()
,以便首先显示警报“ hello1”,然后显示警报“ hello2”?
答案 0 :(得分:2)
根据问题,您可以按照以下定义回调模式,将回调函数定义为参数。
function hello1(callback) {
setTimeout(function(){
alert("hello1");
callback();
}, 500);
}
function hello2() {
alert("hello2");
}
hello1(hello2);
在ES6
中,一种特殊的语法可以更舒适地与promise一起使用,称为async/await
。令人惊讶的易于理解和使用。您也可以使用它。在幕后,async/await
像callback
根据请求进行了编辑:
您可以按照以下链接通过third function(saythehellos)
进行操作。
function hello1(callback) {
setTimeout(function(){
alert("hello1");
callback();
}, 500);
}
function hello2(callback) {
alert("hello2");
callback();
}
function saythehellos(callback) {
hello1(function() {
hello2(function() {
callback();
});
});
}
saythehellos(function(){alert('all done')});
答案 1 :(得分:1)
您可以将ES7的async/await
语法与promise一起使用。在您的hello1()
方法中,您可以返回一个诺言,该诺言将先alert()
,然后再返回resolve
,以表明您的hello1
方法已完成。然后saythehellos()
将等待hello1()
到resolve
(因为我们正在使用await
关键字),然后它将继续执行hello2()
:
function hello1() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
alert("hello1");
resolve();
}, 500);
});
}
function hello2() {
alert("hello2");
}
async function saythehellos() { // make async as we want to use await within this method
await hello1();
hello2();
}
saythehellos();
或者,如果您正在寻找与浏览器更兼容的内容,则可以对.then
返回的promise使用hello1()
回调(本质上是async/await
所做的在引擎盖下)。返回的.then
解决后,将触发promise
回调:
function hello1() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
alert("hello1");
resolve();
}, 500);
});
}
function hello2() {
alert("hello2");
}
function saythehellos() {
hello1().then(function(result) {
hello2();
});
}
saythehellos();
答案 2 :(得分:1)
简单的回调方法是:
array_walk_recursive ($arr, function(&$v,$k){
if($k == 'category_name'){ // check recursively if $k is category_name
$v = explode("/",$v); // replace value with explode result
}
});
我希望这会对您有所帮助。回调函数是作为参数传递的函数。因此,当调用hello1()时,我正在传递完整的函数定义。此参数称为回调函数。
Promise是一种处理回调的有效且干净的新方法。您可以通过Google查看Javascript Promise。
答案 3 :(得分:0)
实现此目标的简单方法:
function Hello1(){
setTimeOut(onTimeOutRaise,500)
}
function onTimeOutRaise(){
alert("Hello1");
Hello2();
}
function Hello2(){
alert("Hello2")
}
“ onTimeOutRaise ”本身就是回调。