美文网首页
js回调机制:内部调用外部的异步,如何改成内部的同步

js回调机制:内部调用外部的异步,如何改成内部的同步

作者: 一个写前端的姑娘 | 来源:发表于2018-12-07 09:51 被阅读0次

描述现象

  • 在vue文件调用方法,方法中传入callback参数(方法执行结束会调用这个callback方法),但是限制这个callback方法只能是外部的方法,当外部的callback方法执行,并且执行结束,需要调用vue文件中的方法或者参数。但是在vue文件中无法知道这个callback函数什么时候执行结束,或者不知道这个callback是否执行成功。
  • 用一张图说明我遇到的问题


    问题.png

    这里出现问题就是:callbackFunction函数执行成功后才可以执行VUEFunction函数,但是在vue内部文件中无法知道外部的callbackFunction函数什么时候执行,什么时候执行结束。

  • 普遍解决方法
    在callbackFunction函数中做一个标志位,表示它是否已经执行结束,但是在vue文件中只能靠轮循来查看这个标志位是否已经执行结束了。使用setInterval()吗?这样的傻逼代码,不想吐槽。。。
  • 正确的解决方法
    将异步改成同步
callOuterFun() {
  let _resolve, _reject
  let readyPromise = new Promise((resolve, reject) => {
    _resolve = resolve
    _reject = reject
  })
  // callbackFunction函数
  let callbackFunction = function(res) {
    if (res.success) {
       _resolve(res)
    } else {
      _reject('error')
    }
  }
  // 超时机制  5秒超时
  let timeout = new Promise((resolve, reject) => {
    setTimeout(function() {
      reject('timeout')
    }, 5000)
  })
  Bridge({callback: 'callbackFunction'})
  return Promise.race([timeout, readyPromise])
}
// 在vue中调用此函数
other.callOuterFun().then(res => {
  // 如果callbackFunction执行成功,走这边
}).catch(err => {
  // callbackFunction执行失败,或者超时,走这边
})

完美将异步改成了同步,赞!!!

感谢您的view,from一个写前端的姑娘

相关文章

  • js回调机制:内部调用外部的异步,如何改成内部的同步

    描述现象 在vue文件调用方法,方法中传入callback参数(方法执行结束会调用这个callback方法),但是...

  • java回调机制

    java的调用机制主要分为同步调用、异步调用、回调这三种,当然也包括一些其它的,例如异步回调等。 同步调用是我们平...

  • 回调函数解析

    一个普通的带函数的参数: 回调函数 回调包含同步回调和异步回调。只不过异步回调用的多一些而已。 回来讲为什么js是...

  • for循环中嵌套setTimeout,执行顺序和结果的理解

    同步优先、异步靠边、回调垫底!公式表达:同步 => 异步 => 回调 JS是单线程环境,也就是说代码的执行是 同步...

  • 模拟异步函数

    异步函数实现机制(async.js) 实现了支持同步函数和异步函数的声明 声明异步函数 调用异步函数

  • js的同步和异步

    js的同步和异步问题通常是指ajax的回调,如果是同步调用,程序在发出ajax调用后就会暂停,直到远程服务抄器产生...

  • 关于findIndex的用法

    内部实现原理 : 数组调用findIndex()方法时,会将数组中的元素当做参数,传入到回调函数,回调函数内部做出...

  • Promise特性

    1,promise内部分微任务和宏任务2,promise本身是同步的,但是他的成功的回调.then方法里面是异步的...

  • Java回调机制解析(转)

    转载自Java回调机制解析 模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。...

  • Android Webview和js交互

    有时我们有这样的需求:需要从app的网页中点击调用软件内部的页面,又或者是软件内部调用网页的js方法。 js代码调...

网友评论

      本文标题:js回调机制:内部调用外部的异步,如何改成内部的同步

      本文链接:https://www.haomeiwen.com/subject/dkoocqtx.html