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"))

输出结果
输出结果

阅读 5k
4 个回答

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

不知道为啥就打断点调试,一步步往下走。

你这个函数就两条语句 没有renturn任何东西嘛。

Vue.prototype.checkValidity = function(type){
    let result
    API.validity(xxx)
}

你看,就这样还能期望它返回啥呢~

API.validity前面加return呀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题