vue在prototype挂一个函数,调用的是return永远是undefined

这个是函数

//比较日期大小function CompareDate(d1){    return ((new Date(d1))) > (new Date());
}
//校验身份Vue.prototype.checkValidity = function(type){    let result
    API.validity(function (res) {    if(res.code == 1){        if(type == "z"){
            result = (CompareDate(res.data.zin_expiring))            console.log( "z",result)            return result
        }        if(type == "s"){
            result = (CompareDate(res.data.sync_expiring))            console.log( "s",result)            return result
        }
    } else {        console.log(res.msg);
    }
    },{
        user_id: localStorage.getItem('user_id')
    })

}
//调用在另一个页面console.log( "调用的打印",this.checkValidity("z"))

输出结果

https://img1.mukewang.com/5c2f5a030001710c04090085.jpg

慕桂英546537
浏览 1775回答 1
1回答

慕慕森

如楼上所说,checkValidity本身并没有return语句,所以它的返回值当然是undefined。你的return只是checkValidity里传入API.validity方法的匿名函数的返回。由于API.validity是个异步函数,直接在API.validity逻辑后面加上return result会在result还没有赋值之前就先返回了。要想使checkValidity按照里层函数的结果返回,简单点的改造要涉及API.validity本身的返回值,如果它现在的内容是:API.validity = function (fn, ob) {     fn()     ... }那就要改成:API.validity = function (fn, ob) {    return fn()     ... }checkValidity里的修改:Vue.prototype.checkValidity = function(type){    return API.validity(...) }let result的定义放在匿名参数函数里,其他不变。函数的返回只能用在它本身上,不可能定义在内层函数的返回去代表外层函数的返回,有多少层函数就要有多少层返回。也正是由于这个原因,语言标准里增加了async和await语句,来用同步写法获取异步函数的执行结果
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5