当前位置: 首页 > 知识库问答 >
问题:

你要等到所有的promise都完成了吗?

龙洛城
2023-03-14

我正在做一个forEach循环,它对Cloudinary进行API调用,我正在用响应数据构建一个数组。

一旦收集到数据,我需要将其发送到其他API。

在发送数据之前,我如何等待promise得到解决并收集数据?

这是我的代码:

app.controller 'ProductImageUploaderController', ($upload, $routeParams, Product) ->

  $routeParams.photos = []

  @startUpload = ->
    @files.forEach (file) ->
      upload = $upload.upload(
        url: 'https://api.cloudinary.com/v1_1/' + $.cloudinary.config().cloud_name + '/upload'
        fields:
          upload_preset: $.cloudinary.config().upload_preset
          tags: 'dev'
          folder: 'dev'
        file: file
      )
      upload.success (data) ->
        $routeParams.photos.push(file)

    # Once the $routeParams.photos array is built, this is when I'd like to pass the data on.

  return

共有1个答案

齐承运
2023-03-14

这里需要的是$q.all

app.controller 'ProductImageUploaderController', ($upload, $routeParams, Product, $q) ->

    $routeParams.photos = []

    @startUpload = ->
        pFiles = @files.map (file) ->
            $upload.upload(
                url: 'https://api.cloudinary.com/v1_1/' + $.cloudinary.config().cloud_name + '/upload'
                fields:
                    upload_preset: $.cloudinary.config().upload_preset
                    tags: 'dev'
                    folder: 'dev'
                file: file
            ).then (response) -> file

        $q.all(pFiles).then (uploadedFiles) ->
            $routeParams.photos = uploadedFiles
            #all files have been uploaded. use tham as you wish

    return
 类似资料:
  • 问题内容: 我如何让一个函数等到所有jQuery Ajax请求都在另一个函数中完成之后? 简而言之,在执行下一个请求之前,我需要等待所有Ajax请求完成。但是如何? 问题答案: jQuery现在为此目的定义了一个when函数。 它接受任意数量的Deferred对象作为参数,并在它们全部解析后执行一个函数。 这意味着,如果您要发起(例如)四个ajax请求,然后在完成后执行操作,则可以执行以下操作:

  • 假设我有一组正在发出网络请求的,其中一个将失败: 假设我想等到所有这些都完成了,不管有没有一个失败了。可能有一个网络错误的资源,我可以生存没有,但如果我可以获得,我想要在我继续。我想优雅地处理网络故障。 由于没有为此留出任何空间,那么在不使用promissions库的情况下,处理此问题的推荐模式是什么?

  • 问题内容: 我需要等到我所有的ajax函数都完成后,再继续执行。 我的特殊情况是,在提交表单之前,我需要翻译表单中的某些字段。我通过ajax调用将其转换为外部站点。根据表单中的某些值,我需要进行更多或更少的翻译。完成所有翻译后(如果有),我必须使用ajax验证表单,如果表单有效,则提交。 这是我的方法: 首先,我有一个函数发送ajax调用并对接收到的数据进行处理: 然后,当要提交表单时,我将执行以

  • 我不乐观有办法做到这一点,但我想提出这个问题。情况:我正在写一个为新手程序员量身定制的JavaScript游戏引擎。我希望主脚本界面尽可能简单和可访问。理想情况下,脚本最终会看起来像这样: 在这个场景中,第一个背景会在一秒钟内完全淡入,然后第二个背景会同步淡入。问题出在哪里?JavaScript将在第一个命令完成之前尝试执行第二个命令。 现在,正确的处理方法是使用promise。类似的东西: 这完

  • 我和Nodejs一起工作。我有一个异步,因为我必须等待内部的结果。因此,我需要等待foreach完成,然后继续循环的结果。我找到了几个等待的解决方案,其中一个是使用promise。虽然我这样做了,这些promise是创建的,但是,代码后的每个(因此promise)完成,从来没有实际执行(console.log没有打印)。NodeJS函数结束时没有任何错误。 这是我的密码: “here”只打印一次(

  • 我有一个4个线程同时运行的代码。我想等到所有这4个线程都完成。并且只有在那之后才能继续应用程序流程。 我尝试了两种方法: ,此方法按预期工作。 之后出现的代码仅在所有线程完成后执行。 ,这种技术允许执行代码,即使不是所有线程都已完成,也会在 之后执行。 代码示例: 我的问题: 为什么 和 不要等到所有线程都完成并打印 “我们完成了!所有线程都已完成!» 在调用 ?