使用简单示例的javascript回调模式

时间:2019-06-19 05:50:03

标签: javascript callback

出于我的目的,我一直无法找到一个简单的JavaScript回调模式示例,回答以下问题将非常有帮助。

假设我有2个函数,每个函数显示一个警报:

function hello1() {
 setTimeout(function(){
    alert("hello1");
   }, 500); 
  } 

function hello2() {
 alert("hello2");
  }

如果我正在使用此功能,

function saythehellos()
{
hello1();
hello2();
}

首先显示警报“ hello2”,然后显示警报“ hello1”

如何使用回调模式更改功能saythehellos(),以便首先显示警报“ hello1”,然后显示警报“ hello2”?

4 个答案:

答案 0 :(得分:2)

根据问题,您可以按照以下定义回调模式,将回调函数定义为参数。

function hello1(callback) {
  setTimeout(function(){
    alert("hello1");
    callback();
  }, 500); 
} 

function hello2() {
  alert("hello2");
}

hello1(hello2);

ES6中,一种特殊的语法可以更舒适地与promise一起使用,称为async/await。令人惊讶的易于理解和使用。您也可以使用它。在幕后,async/awaitcallback

  

根据请求进行了编辑:

您可以按照以下链接通过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 ”本身就是回调。