JavaScript await和yield关键字的区别是什么

JavaScript await和yield关键字的区别是什么

在这篇文章中,我们将看到await关键字与yield关键字的区别。

生成器函数: 可以根据用户需求在不同的时间间隔返回多个值,并且可以管理其内部状态的函数就是生成器函数。如果一个函数使用 ** function*** 语法,则它成为一个生成器函数。它们与普通函数不同,因为普通函数在单次运行中完成,而我们可以暂停和恢复生成器函数。

注意: 当执行生成器函数时,它会返回一个新的生成器对象。

功能: yield和await都可以用于编写“等待”的异步代码,这意味着代码看起来是同步的,即使实际上是异步的。

await: 这是一个用于等待Promise的运算符。在我们的常规JavaScript代码中,我们在async函数内部使用它,并且它可以与JavaScript模块一起使用。

当我们在表达式中使用await关键字时,async函数的执行将被暂停,直到Promise解决(即满足或拒绝),然后恢复async函数的执行。恢复后,await表达式的值就是已满足的Promise的值。

语法:

var result = await expression;

expression: 承诺或任何需要等待的值。

result: 包含承诺的值(解决值)。

示例:

Javascript

<script>
    function calculate(y) {
        var promise = new Promise(function(resolve, reject) {
            setTimeout(function() {
                resolve(calculateSquare(y));
            }, 3000);
        });
        return promise;
    }
 
    function calculateSquare(y) {
        return y * y;
    }
 
    async function main() {
 
        /* The expression following the await 
        the operator is not a Promise, it's 
        converted to a resolved Promise.*/
 
        // Code will be synchronized 
        var s1 = await calculate(5); 
 
        // After 3 sec this line will get execute
        console.log("Square of 5 is : " + s1);
        var s2 = await calculate(10);
 
        // After 3 sec next this line will get execute
        console.log("Square of 10 is : " + s2); 
 
         // In last this line will get execute
        console.log("End");
    }
 
    main()
</script>

(注意:在node.js中运行上述代码)

输出:

JavaScript await和yield关键字的区别是什么

yield: yield关键字用于暂停和恢复生成器函数的执行。

关键字yield用于暂停生成器函数的执行,并且表达式后面的值将作为yield关键字的返回值返回给生成器的调用者。

它导致调用生成器的next()方法返回一个具有两个属性的IteratorResult对象:

  • value:由yield关键字返回的值。
  • done:一个布尔类型的值。(如果done为false,表示生成器函数尚未完整执行完成)。

使用yield关键字,我们可以为数据遍历创建一个迭代器。

语法:

var result = yield expression;

表达式: 从生成器函数中返回的值。

结果: 检索传递给生成器的next()方法的可选值,以恢复其执行。

示例:

Javascript

<script>
    function* getValues(start, end) {
        while (start <= end) {
            yield start;
            start++;
        }
    }
 
    /* Expression */
    var it = getValues(5, 10);
 
    /* Generator's next() method  return an
    IteratorResult object with two 
    properties: value and done*/
 
    //element : {value : Object ,done : boolean}
    var element = it.next(); 
 
    while (element.done == false) {
        console.log(element);
        element = it.next();
    }
 
    // value:undefined, and done : false 
    console.log(element);
</script>

注意:在node.js中运行上述代码

输出:

JavaScript await和yield关键字的区别是什么

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程