JavaScript Promise和回调函数

JavaScript Promise和回调函数

在本文中,我们将介绍Promise、回调函数以及它们之间的区别。

什么是JS中的Promise?

在JavaScript中,使用Promise来管理异步操作。它表示某件事情一定会被做好。Promise用于跟踪异步事件是否已执行,并确定事件发生后会发生什么。

一个Promise有四种状态:

  • fulfilled: 与Promise相关的操作成功完成
  • rejected: 与Promise相关的操作失败
  • pending: Promise仍处于等待状态,尚未完成或拒绝
  • settled: Promise已完成或拒绝

    语法:

var promise = new Promise(function(resolve, reject){
    // do something
});

A promise can be created using Promise constructor.

参数:

  • Promise构造函数只接受一个参数,即回调函数(该回调函数也被称为匿名函数)。
  • 回调函数接受两个参数,resolve和reject。
  • 在回调函数内执行操作,如果一切顺利,则调用resolve。
  • 如果所需操作不顺利,则调用reject。

示例

Javascript

var promise = new Promise(function(resolve, reject) { 
const x = "geeksforgeeks"; 
const y = "geeksforgeeks"
if(x === y) { 
    resolve(); 
} else { 
    reject(); 
} 
}); 
      
promise. 
    then(function () { 
        console.log('Success, You are a GEEK'); 
    }). 
    catch(function () { 
        console.log('Some error has occurred'); 
    });

输出

Success, You are a GEEK

Promise的好处:

  • 提高代码可读性
  • 更好地处理异步操作
  • 在异步逻辑中更好地定义控制流
  • 更好的错误处理

什么是JS中的回调函数?

回调函数是一种处理在另一个任务完成后执行某个操作的方法。这里的“某个操作”指的是一个函数的执行。如果我们希望在另一个函数返回后立即运行一个函数,可以使用回调函数。

JavaScript函数是对象类型,因此当调用它们时,它们可以作为参数传递给任何其他函数,就像其他对象(字符串、数组等)一样。

JavaScript代码示例来展示回调函数的工作原理:

Javascript

// The add() function is called with arguments a, b 
// and callback, callback will be executed just 
// after ending of add() function 
function add(a, b , callback){ 
    console.log(`The sum of {a} and{b} is ${a+b}`); 
    callback(); 
} 
  
// The disp() function is called just 
// after the ending of add() function 
function disp(){ 
    console.log('This must be printed after addition'); 
} 
  
// Calling add() function 
add(5,6,disp)

输出 :

The sum of 5 and 6 is 11.
This must be printed after addition

解释

这里有两个函数 – add(a, b, callback) 和 disp()。在add()函数中,传入了disp()函数作为第三个参数,同时还有两个数字。

作为结果,add()会被调用,传入1、2以及回调函数disp()。add()会打印这两个数字的相加结果,完成后立即触发回调函数!因此,我们会在额外的输出下方看到disp()里面的内容。

回调函数的好处

  • 你可以在等待前一个函数调用的结果后再运行另一个函数调用。
  • 你可以从子函数中调用父函数,并且还可以传递数据从子函数到父函数。

JavaScript中的Promise与回调函数的比较

比较项 JavaScript回调函数 JavaScript Promise
语法 语法难以理解。 语法用户友好,容易阅读,因为有then和catch。
错误处理 错误处理可能难以管理。 使用catch块可以更容易地管理错误处理。
回调地狱 可能会导致回调地狱。 可以解决回调地狱问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程