JS异步函数 返回值

1.  js 异步的几种情况 :

1.1 异步操作由浏览器内核的 webcore 来执行:

onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。
setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。
ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。

1.2 如:http (ajax)、UI 重绘 、事件 ( onclick )、延时函数 (setTimeout)

 

2. 异步函数返回值处理

2.1 setTimeout

    function getSomething(cb) {
      var r = 0;
      setTimeout(function () {
        r = 2;
        cb(r);
      }, 2000);
    }
    function compute(x) {
      console.log(x);
    }
    getSomething(compute);
View Code

 

2.2 promise

function getSomething() {
    var r = 0;
    return new Promise(function(resolve) {
        setTimeout(function(){
            r = 2;
            resolve(r);
        },2000)
    })
}
function compute(x) {
    console.log(x * 2);
}
getSomething().then(compute);
View Code

初探Promise 

 

2.3 async 

function getSomething() {
    var r = 0;
    return new Promise(function(resolve) {
        setTimeout(function() {
            r = 2;
            resolve(r);
        },2000)
    })
}
async function compute() {
    var x = await getSomething();
    console.log(x * 2);
}
compute();
View Code

 

2.4 generator

function getSomething() {
    var r = 0;
    setTimeout(function() {
        r = 2;
        it.next(r);
    },2000);
}
function *compute(it) {
    var x = yield getSomething();
    console.log(x * 2);
}
var it = compute();
it.next();
View Code

 

2.5 promise和generator相结合

function getSomething() {
    var r = 0;
    return new Promise(function(resolve) {
        setTimeout(function() {
            r = 2;
            resolve(r);
        },2000)
    })
}
function *compute() {
    var x = yield getSomething();
    console.log(x * 2);
}
var it = compute();
it.next().value.then(function(value) {
    it.next(value);
})
View Code

 

 

3. 相关文章

异步原理的理解和总结

JS同步异步以及回调函数?

JS异步函数返回值的几种方式

详解回调函数——以JS为例解读异步、回调和EventLoop

告诉你什么是javascript的回调函数

 

转载于:https://www.cnblogs.com/justSmile2/p/10524585.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中,异步函数返回值不能直接通过返回的方式获得,因为异步函数操作是在主线程之外执行的,直接访问返回值返回一个 undefined。同时,异步函数返回值也不会被储存在函数的作用域内,因为它们可能会在异步操作完成之前被回收。但是,通过使用 Promise 或者回调函数,我们可以获得异步函数返回值。 使用 Promise: Promise 是一个用于处理异步操作的对象。异步函数可以返回 Promise 对象,Promise 对象可以在异步操作完成之后调用 resolve 或 reject 方法来返回异步操作的结果。我们可以通过等待 Promise 对象的 resolve 或 reject 方法成功完成来获得异步函数返回结果。例如: ```javascript function asyncFunction() { return new Promise((resolve, reject) => { // 异步操作 setTimeout(() => { resolve('操作成功'); }, 1000); }); } asyncFunction().then(result => { console.log(result); }); ``` 使用回调函数: 回调函数是指传递给异步函数的一个函数,它会在异步操作完成后被调用。我们可以通过传入一个回调函数来获得异步函数的结果。例如: ```javascript function asyncFunction(callback) { // 异步操作 setTimeout(() => { callback('操作成功'); }, 1000); } asyncFunction(result => { console.log(result); }); ``` 总结: 获得异步函数返回值有两种常见的方式:使用 Promise 或者回调函数。使用 Promise 操作异步函数时,异步函数需要返回 Promise 对象,然后我们通过等待 Promise 的成功或失败来获得异步函数返回结果;使用回调函数操作异步函数时,我们需要将回调函数传递给异步函数,然后在异步操作完成后调用回调函数返回异步函数的结果。需要注意的是,同时使用 Promise 和回调函数时可能会产生一些意想不到的结果,在实际开发中需要根据需求来选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值