ios如何等待异步函数执行完成

问题描述

ios如何等待异步函数执行完成

iOS中如何等待异步函数执行完成之后再进行之后的操作
func getMovies()
{
let movieId:NSMutableArray = NSMutableArray()

    let path = "http://v.juhe.cn/movie/movies.today";
    let api_id = "42";
    let method = "GET";
    let param = ["cityid":7,"key":"c086aa6fd871c407219dc969620be8f7", "dtype":"json"];
    let juhepai = JHAPISDK.shareJHAPISDK();
    let group = dispatch_group_create()

   dispatch_group_async(group, dispatch_get_main_queue()) {
    juhepai.executeWorkWithAPI(path, APIID: api_id, parameters: param, method: method,
                               success:{responseObject in
                                /*成功代码*/
                                let result = responseObject["result"] as! NSArray

                                for i in 0...result.count-1{
                                    let test:NSString = result[i]["movieId"] as! NSString
                                    print(test)
                                    movieId.addObject(test)

                                }

        },
                               failure:{error in
                                /*失败代码*/
                                print("dsffadf")
        }
    )
    }
    dispatch_group_notify(group, dispatch_get_main_queue()) {

    }
}
executeWorkWithAPI是聚合数据提供的异步函数,希望在executeWorkWithAPI的回调函数执行完成之后再print(movieId)
试过用diapatch_group,然而每次都是先执行print(movieId)在执行executeWorkWithAPI的回调函数

解决方案

用信号量来同步。先wait,在异步函数的成功,失败handler中设置信号。这样就可以把异步转成同步

时间: 2024-10-30 01:39:22

ios如何等待异步函数执行完成的相关文章

node.js-关于Node.js等待异步返回结果的问题。

问题描述 关于Node.js等待异步返回结果的问题. 懂Node.js的大神帮忙解决各位问题吧!!问题:mysql查询数据的函数,返回查询结果,但由于query异步,因此该函数在未查询到结果前已经返回,代码如下:function func_GetTableCount(tableName) { var json = ''; if (connection != null) { var sql = ""SELECT * FROM "" + tableName; conne

《Node学习指南》一1.3 异步函数及Node事件循环

1.3 异步函数及Node事件循环 Node学习指南 Node的基本设计原则是将应用程序放置在单线程(或单进程)中执行,同时异步处理所有事件. 考虑下典型的Web服务器(如Apache)是如何工作的.Apache可以采用两种不同的方式处理传入的请求:一种方式是将传入的每个请求分配到独立的进程中直至请求被处理完毕:另一种方式则是为每一个请求生成单独的处理线程. 第一种方式(也称为prefork multiprocessing model,或prefork MPM)可以根据Apache配置文件中指定

谈谈JavaScript异步函数发展历程_javascript技巧

<The Evolution of Asynchronous JavaScript>外文梳理了JavaScript异步函数的发展历程,首先通过回调函数实现异步,之后又经历了Promise/A+.生成器函数,而未来将是async函数的.感谢景庄对该文章的翻译,内容如下: 现在让我们一起来回顾这些年来JavaScript异步函数的发展历程吧. 回调函数Callbacks 似乎一切应该从回调函数开始谈起. 异步JavaScript 正如我们所知道的那样,在JavaScript中,异步编程方式只能通过

Promise模式将JS回调函数和异步函数彻底分离

文章简介:情况再复杂点,如果一个操作要等到多个异步 ajax 请求的完成才能进行,就会出现回调函数嵌套的情况,如果需要嵌套好几层,那你就只能自求多福了. 网页的交互越来越复杂,JavaScript 的异步操作也随之越来越多.如常见的 ajax 请求,需要在请求完成时响应操作,请求通常是异步的,请求的过程中用户还能进行其他的操作,不会对页面进行阻塞,这种异步的交互效果对用户来说是挺有友好的.但是对于开发者来说,要大量处理这种操作,就很不友好了.异步请求完成的操作必须预先定义在回调函数中,等到请求完

JavaScript自定义等待wait函数实例分析

 这篇文章主要介绍了JavaScript自定义等待wait函数,实例分析了自定义等待函数的实现与使用技巧,需要的朋友可以参考下     本文实例讲述了JavaScript自定义等待wait函数用法.分享给大家供大家参考.具体分析如下: 下面是一个js自定义的wait函数,可以暂停程序的执行 ? 1 2 3 4 5 6 7 8 function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime()

NodeJS中利用Promise来封装异步函数

这篇文章主要介绍了NodeJS中利用Promise来封装异步函数,使用统一的链式API来摆脱多重回调的噩梦,非常的实用的小技能,希望小伙伴们能够喜欢 在写Node.js的过程中,连续的IO操作可能会导致"金字塔噩梦",回调函数的多重嵌套让代码变的难以维护,利用CommonJs的Promise来封装异步函数,使用统一的链式API来摆脱多重回调的噩梦. Node.js提供的非阻塞IO模型允许我们利用回调函数的方式处理IO操作,但是当需要连续的IO操作时,你的回调函数会多重嵌套,代码很不美观

同步-为什么javascript异步函数一定要用回调的方式?

问题描述 为什么javascript异步函数一定要用回调的方式? 对于异步函数来说,回调方式和同步方式有何区别? service .queryActivityJoin(data) .done(function (response) { // 如果已经参加 if (response.data.is_join == 1) { $('.prize').css({ "background-image": "url(http://img.gsxservice.com/0cms/d/fi

ES6记录异步函数的执行时间详解_javascript技巧

calc calc 是一个我们想要做剖析(性能分析)的异步函数.按照惯例,它的最后一个参数是一个callback.我们像这样使用 calc: calc(arg, (err, res) => console.log(err || res)) 或许,最简单的对 calc 这样的函数来剖析性能的方法是,增加一个计时逻辑到我们需要分析的地方: const t0 = Date.now() calc(arg, (err, res) => { const t1 = Date.now() console.lo

不同js异步函数同步的实现方法_javascript技巧

不同函数达到同步的函数模拟 funcList是函数执行函数的队列,其中回调函数中flag=true是同步标记量 <script> var flag = false; function funcTest(t,func){ setTimeout(function(){ (function(param){ console.log(param); func(); }(t)); },t*1000); } var funcList = []; funcList.push(function(){funcTe