javascript中async、await、yield、*的用法

async、await的用法

function call(){
    console.log('call funtion');
    return new Promise(resolve=>{
        setTimeout(function(){
            console.log('call funtion timeout');
            resolve('dd');
        },1000);        
    });

}
function normalFunction() {
    console.log('normalFunction');
    return 'data'
}
// call(function(){
//     console.log('callback');
// });
async function asynctest() {
    console.log('start');
    await call();
    await normalFunction();
    await new Promise(resolve=>{ console.log('wait result'); resolve()});
    console.log('end');
}
asynctest();

执行结果

PS F:\zzj1026\Rnx\testEgg> node .\async.js
start
call funtion
call funtion timeout
normalFunction
wait result
end
PS F:\zzj1026\Rnx\testEgg>

个人理解 async是说明这个function是异步的await这个关键字是阻塞(将函数挂起,等待返回结果),如果返回值是promise则等待promise的resolve或reject的结果,如果是函数返回的普通值直接往下执行

yield使用

function call(){
    console.log('call funtion');
    return new Promise(resolve=>{
        setTimeout(function(){
            console.log('call funtion timeout');
            resolve('dd');
        },1000);        
    });

}
function normalFunction() {
    console.log('normalFunction');
    return 'data'
}
function* yieldFunc() {
    console.log('start');
    yield call();
    yield normalFunction();
    console.log('end');
}
let yieldData=yieldFunc();
let firstData=yieldData.next();
console.log(firstData);
firstData.value.then(function(data){
    console.log(data);
});
yieldData.next();
console.log(yieldData);

执行结果

PS F:\zzj1026\Rnx\testEgg> node .\async.js
start
call funtion
{ value: Promise { <pending> }, done: false }
normalFunction
{}
call funtion timeout
dd
PS F:\zzj1026\Rnx\testEgg>

个人理解: 函数执行每次都执行到yield这里返回一个yield阻塞的值{ value: Promise { }, done: false },这个时候就可以处理值了,然后如果done为true时表示这个函数已经执行完成了

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
async/awaitJavaScript处理异步操作的一种方式。它是基于Promise的语法糖,可以使异步代码更加简洁和易读。 在使用async/await之前,我们先来了解一下Generator函数。Generator函数是ES6引入的一种特殊函数,它可以通过yield关键字来暂停函数的执行,并返回一个可迭代的对象。通过调用next()方法,可以继续执行Generator函数,并返回下一个yield语句的值。 async函数是一个返回Promise对象的函数。在函数内部,可以使用await关键字来暂停函数的执行,等待Promise对象的状态变为resolved(已完成)后再继续执行。使用async函数可以使异步代码看起来像同步代码,提高代码的可读性。 下面是一个使用async/await处理异步操作的示例: ```javascript function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function asyncFunction() { console.log('Start'); await delay(2000); // 等待2秒 console.log('End'); } asyncFunction(); ``` 在上面的示例,delay函数返回一个Promise对象,通过await关键字等待2秒后,再继续执行后面的代码。运行上述代码,会先输出"Start",然后等待2秒后输出"End"。 在Node.jsasync/await也可以用于简化处理callback或Promise的异步操作。通过将异步操作封装成Promise对象,然后在async函数使用await关键字等待Promise对象的完成,可以使异步代码更加简洁和易读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值