为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2019-01-04 21:04:34
这个是函数//比较日期大小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"))输出结果
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如楼上所说,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语句,来用同步写法获取异步函数的执行结果


查看完整回答
反对 回复 2019-01-04
  • 1 回答
  • 0 关注
  • 1774 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信