vuejs2 - 如何在 vuejs 中执行其他操作之前等待函数的响应

标签 vuejs2

我有一个图像上传功能,这个上传完成后返回一个数据,我在该功能下方有一行来执行另一项任务。问题是 vuejs/js 不会等到第一个函数完成任务。所以,这就是我的代码的样子:

methods : {

    uploadImage (file) {

        this.uploadModule.upload(file); 

        if(this.uploadModule.isSuccess) {
             this.images.push(this.uploadModule.response)
        }

      // someFunction()
  }
}

所以,在上面的例子中,因为 upload() 方法需要一些时间,那么 someFunction()部分在 this.images.push() 之前运行部分。

有没有等到上传完成后再运行另一个功能?

最佳答案

您可以从上传方法返回一个 Promise,并在 Promise 的“next”方法中作为回调执行下一部分代码。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

它应该是这样的:

methods : {

  uploadImage (file) {

    this.uploadModule.upload(file).then(function () {
      if(this.uploadModule.isSuccess) {
        this.images.push(this.uploadModule.response)
      }

      // someFunction()
    })
  }
}

如果上传未完成,您还可以使用 Promise 拒绝回调处理错误并使用 catch 方法处理错误:
methods : {

  uploadImage (file) {

    this.uploadModule.upload(file).then(function () {
      this.images.push(this.uploadModule.response)
    }).catch(function (error) {
      console.log(error)
    })
  }
}

关于vuejs2 - 如何在 vuejs 中执行其他操作之前等待函数的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46950716/

相关文章:

javascript - 自定义输入组件忽略来自方法的更新

vue.js - Vee 验证 - [Vue 警告] : Failed to resolve directive: validate

javascript - 如何测试组件中另一个模块的自定义指令

javascript - Vue.js $emit 和 $dispatch 有什么区别?

javascript - Axios 请求在 VueJs 上进入无限循环

html - Vue.js - Material Design Lite 组件不会自动升级,除非刷新

javascript - 将 LocalStorage 对象传递给已安装的数据变量

javascript - Vue.js 标记为无效 HTML

Vue.js:我们应该将脚本或模板放在单个文件组件中以提高生产力吗?

javascript - 尝试发出自定义类 Vuejs 时 $emit 不起作用