js异步理解及return语句

return 语句会终止函数的执行并返回函数的值。
但是只会执行当前函数,如果嵌套多层函数,每一层都需要return才可以
比如:

function test(){
        return 1;
}
console.log(test());     
// 1

function test(){
     (function(){
        return 1;
    })();
}
console.log(test());   
//undefined

//自执行也需要return
function test(){
    return (function(){
        return 1;
    })();
}
//1

参考http://www.cnblogs.com/zmc/p/6916164.html
前两天同事一直问我js异步的问题,因为他写小程序经常遇到,他用promise也解决不了,一直返回undefined。今天写一个功能的时候也卡在这里,查了下资料并认真思考总结下js异步。

最常见的解决方案就是回调函数处理异步,就是传入一个回调函数,等到动作执行成功的时候执行,但是回调函数并不能很好地获取到返回值,也就限制了return关键字的使用。如果我在一个页面里面调用公共js里面的方法,正好这个方法是异步的,我又想要获取到这个异步执行完的值,要怎么获取呢?es6的promise便是最好的解决方法了。下面是一个比较好的理解promise的例子

<script src="https://cdn.bootcss.com/bluebird/3.5.1/bluebird.min.js"></script>//如果低版本浏览器不支持Promise,通过cdn这种方式
      <script type="text/javascript">
        function loadImg(src) {
            var promise = new Promise(function (resolve, reject) {
                var img = document.createElement('img')
                img.onload = function () {
                    resolve(img)
                }
                img.onerror = function () {
                    reject('图片加载失败')
                }
                img.src = src
            })
            return promise
        }
        var src = 'https://www.imooc.com/static/img/index/logo_new.png'
        var result = loadImg(src)
        result.then(function (img) {
            console.log(1, img.width)
            return img
        }, function () {
            console.log('error 1')
        }).then(function (img) {
            console.log(2, img.height)
        })
     </script>

链接:https://www.jianshu.com/p/1f66aca680cb

阮大大说:“Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。”

所以注意,promise里面一定要在需要的地方调用resolve函数,不然它的状态是不会从pending自动变为resolved,再回头看看我那位小同事的代码,可不是,写了promise没调用resolve, 当然返回undefined了,ε=(´ο`*)))唉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值