JavaScript promise chaining

JavaScript promise chaining

Promise Chaining是一个简单的想法,允许我们在.then()方法中初始化第二个promise,然后根据结果执行。之前promise返回的值会被内部的函数捕获。

当我们需要运行两个或多个相关的异步操作时,有时我们需要使用在前一个操作的结果之上进行的第一个操作。

当我们需要按顺序管理多个异步任务时,Promises非常方便。我们使用promise chaining来实现这一点。通过then()、catch()和finally方法,我们可以在promise被满足后执行一个动作。

链式promises的语法

第一个语法

有时候我们希望按顺序执行多个异步任务。同时,我们必须将前一个阶段的结果传递给后一个阶段。在这种情况下,我们可以使用以下语法:

Promise_step1()
    .then(result => Promise_step2(result))
    .then(result => Promise_step3(result))
    ...
    .then(result => Promise_stepN(result))

第二种语法

如果我们需要将上一个作业的结果传递给后续作业而不传递结果,请使用以下语法:

Promise_step1()
    .then(Promise_step2)
    .then(Promise_step3)
    ...
    .then(Promise_stepN)

如何使用Promise链式操作

这个语法展示了JavaScript中Promise链式操作的过程和工作原理。

<script>
let promise_variable = new Promise((resolve, reject) => {
resolve("JavaScript chaining");
});
promise_variable
.then( function (resultInfo1){
console.log(resultInfo1);
return new Promise((resolve,reject) =>{
resolve("JavaTpoint");
})
})
.then((resultInfo2) => {
console.log(resultInfo2);
});
</script>

说明

  • promise()函数与then()方法一起使用。
  • 该方法显示控制台选项卡以获取输出。
  • 第二个promise函数放在第一个then()函数内部。
  • 我们可以通过解析和拒绝操作来获取输出数据和功能。

示例

以下示例显示了promise函数的链接操作。以下示例避免了使用多个处理程序,而是使用promise链。

示例1

基本的promise链函数显示两个promise值作为输出。我们使用了三个promise和then()方法。

<!DOCTYPE html>
<html>
<head>
<title> JavaScript's Promise.allSettled() method </title>
<script>
console.log("JavaScript's Promise Chaining Function");
let promise_variable = new Promise((resolve, reject) => {
resolve("JavaScript chaining");
});
promise_variable
.then( function (resultInfo1){
console.log(resultInfo1);
return new Promise((resolve,reject) =>{
resolve("JavaTpoint");
})
})
.then((resultInfo2) => {
console.log(resultInfo2);
return new Promise((resolve,reject) =>{
resolve("TutorialsAndExamples");
})
})
.then((resultInfo3) => {
console.log(resultInfo3);
});
</script>
</head>
<body>
<h3> JavaScript's Promise Chaining Function  </h3>
<p> The output information shows in the console tab </p>
</body>
</html>

输出

显示承诺链函数的输出图像。

JavaScript promise chaining

示例2

JavaScript的promise链式函数显示了多个promise的值,将操作作为输出。我们使用不同的promise和所需的then()方法以所需的时间。

<!DOCTYPE html>
<html>
<head>
<title> JavaScript's Promise Chaining Function </title>
<script>
console.log("JavaScript's Promise Chaining Function");
let promise_var = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(18);
    }, 3 * 10);
});
promise_var.then((result_var) => {
    console.log(result_var); 
    return result_var * 2;
}).then((result_var) => {
    console.log(result_var);
    return result_var * 3;
}).then((result_var) => {
    console.log(result_var); 
    return result_var * 4;
}).then((result_var) => {
    console.log(result_var); 
    return result_var * 5;
}).then((result_var) => {
    console.log(result_var); 
    return result_var * 5;
});
</script>
</head>
<body>
<h3> JavaScript's Promise Chaining Function  </h3>
<p> The output information shows in the console tab </p>
</body>
</html>

输出

显示的图像承诺链接函数的输出。

JavaScript promise chaining

示例3

javascript的promise链式函数展示了多个promise值,将操作作为输出。我们使用各种promise和所需的时间来使用then()方法。

<!DOCTYPE html>
<html>
<head>
<title> JavaScript's Promise Chaining Function </title>
<script>
console.log("JavaScript's Promise Chaining Function");
let promise_var = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(18);
    }, 3 * 10);
});
function getEmployee(empId) {
    return new Promise((resolve, reject) => {
        console.log('Get the user from the database.');
        setTimeout(() => {
            resolve({
                empId: empId,
                empname: 'admin'
            });
        }, 100);
    })
}
function getWorkData(emp) {
    return new Promise((resolve, reject) => {
        console.log(`Get the employee data of {emp.empname} from the API.`);
        setTimeout(() => {
            resolve(['Email', 'NUMBER', 'VPN']);
        }, 3 * 100);
    });
}
function  getWorkDataCost(services) {
    return new Promise((resolve, reject) => {
        console.log(`Calculate the Employee working cost of{services}.`);
        setTimeout(() => {
            resolve(services.length * 100);
        }, 2 * 100);
    });
}
getEmployee(10)
    .then(getWorkData)
    .then(getWorkDataCost)
    .then(console.log);
</script>
</head>
<body>
<h3> JavaScript's Promise Chaining Function  </h3>
 The output information shows in the console tab 
</body>
</html>

输出

显示的图像表示promise链接函数的输出。

JavaScript promise chaining

多个处理程序用于promise链

当我们重复调用then()方法时,它不适用于promise链。一个promise有多个处理程序,这些处理程序之间没有任何连接。与promise链不同,它们分别执行,并且不会将输出传递给其他处理程序。

示例

下面的示例使用了一个单一的promise来为多个处理程序提供服务。输出显示了每个处理程序的初始promise值。

<!DOCTYPE html>
<html>
<head>
<title> JavaScript's Promise Chaining Function </title>
<script>
console.log("JavaScript's Promise Chaining Function");
let promise_var = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(15);
    }, 3 * 10);
});
promise_var.then((result_var) => {
    console.log("first promise value:"+result_var); 
    return result_var * 2;
})
promise_var.then((result_var) => {
    console.log("second promise value:"+result_var);
    return result_var * 3;
})
promise_var.then((result_var) => {
   console.log("Third promise value:"+result_var);
    return result_var * 4;
})
</script>
</head>
<body>
<h3> JavaScript's Promise Chaining Function  </h3>
 The output information shows in the console tab 
</body>
</html>

输出

显示的图像承诺链函数的输出。

JavaScript promise chaining

结论

Promise链式可以使用”then()”方法显示多个输出。该方法使用promise变量。它适用于使用方程式的单输入和多个输出。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程