问题标签 [promisekit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4364 浏览

swift - 我应该在 PromiseKit 块中使用 [weak self] 吗?

PromiseKit 在其网站上声明以下内容:

我应该担心保留周期吗?

tl; dr:在 promise 处理程序中使用 self 是安全的。

这是安全的:

如果somePromise解析,传递给的函数then将被释放,因此[weak self]不需要指定。

指定 [unowned self] 可能很危险。

你是在告诉我不要担心保留周期?!

不,只是默认情况下,在使用 PromiseKit 时不会导致保留周期。但是还是有可能的...

这是否意味着我永远不应该[weak self]在 PromiseKit 块中使用?有没有我仍然需要使用的情况[weak self]?它究竟是如何防止保留周期的?

0 投票
2 回答
489 浏览

swift - While Loop 在 Promisekit 完成运行并在 Swift 中返回正确的值之前递增并重新运行

我正在尝试使用带有 Alamofire 的 Promisekit 的 while 循环来链接四个 GET 请求,返回一个值,然后使用新参数重新运行四个请求。这是我正在使用的当前代码:

前三个函数中的每一个都返回一个承诺的字符串值,然后将其传递给下一个函数,直到第四个也是最后一个函数调用另一个函数来使用 Kanna 解析下载的 HTML。

理想情况下,我希望调用并完成所有四个函数,之后索引将递增并使用新的索引号再次运行循环。需要注意的是,传递给函数的索引是一种识别数组中的哪个索引值应该与哪个索引进行比较的方法。

为清楚起见,我在下面包含了 parseBooksXML 函数的代码:

任何帮助,将不胜感激!

0 投票
2 回答
151 浏览

ios - 如何本机避免多个异步任务的嵌套块,这些任务必须在另一个完成后执行

情况如下:

有超过 3 个异步任务。每一项只能在前一项完成后才能执行。是的,必须在上一个完成之后。这就是为什么调度组可能不适合这种情况,因为它不太关心“排序”。我正在寻找的是一种无需太多嵌套即可编写此类代码的好方法 - 就像'promisekit'打破嵌套块所做的那样。

我还看到一些人建议使用“串行队列”。好吧,我尝试使用下面的代码:

我使用串行队列调用这些方法:

如果一切正常,异步任务 2 应该在 5 秒后开始执行,这是异步任务 1 的完成时间

然而,结果并不如我所料:

2016-09-14 18:59:39.853 SerialQueueTest[32002:2292385] async1 开始

2016-09-14 18:59:39.854 SerialQueueTest[32002:2292385] async2 开始

2016-09-14 18:59:41.854 SerialQueueTest[32002:2292385] 异步 2 完成

2016-09-14 18:59:45.353 SerialQueueTest[32002:2292385] 异步 1 完成

我写错代码了吗?有没有编写较少嵌套代码的本机方式?如果有 5-6 个异步任务,并且每个任务都依赖于彼此的结果,那么代码将非常庞大。我什至会想到一个案例:一个通用的登录功能,它还集成了一些第三方帐户登录。

我也在考虑以不同的方式使用调度组:1.进入组并完成第一个异步任务并退出组。2.在dispatch_group_notify块内,再次进入第二个异步任务的调度组。3. 在 disptach_group_notify 块外,调用第二个异步任务并再次退出组。4.编写第二个dispatch_group_notify,用于通知第二个任务完成。

0 投票
1 回答
646 浏览

ios - PromiseKit 4 - 包装委托

我正在尝试使用 Promisekit 实现带有包装委托的单例

我设法按照这里的描述实现这个: https ://github.com/mxcl/PromiseKit/issues/136

它有效,但承诺保留了第一次调用的价值。它不会更新价值。

示例代码:

0 投票
1 回答
75 浏览

swift - 从闭包中调用“完成”时出错

这是我的错误...

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x18)

这是我的产品请求代表...

这是请求...

此调用导致发生错误...

有什么想法为什么这不起作用?似乎委托已解除分配。

0 投票
1 回答
738 浏览

swift - 等待承诺返回

我想在我的应用程序启动时异步加载一些数据,并使用稍后在应用程序流程中呈现的视图控制器中加载的数据。

如何确定数据是否已加载,如果尚未加载,我如何等待它加载?

因此,如果在 AppDelegate 中代码是......_ = service.LoadData()并且这会返回一个承诺,那么视图控制器如何知道该承诺是否已返回?

如果 Promise 已经返回,那么在 Promise 的末尾添加一个新的.then调用肯定是行不通的。

0 投票
1 回答
3547 浏览

ios - 从 PromiseKit/Alamofire 返回一个 Promise

我正在尝试做这件看似微不足道的事情:

但是,编译器(正确地)抱怨说:

'guard' body 可能不会掉下来,考虑使用 'return' 或 'break' 退出范围

我知道我需要在这里返回一个 Promise。我只是不知道在 reject() 和 fully() 调用下面到底要放什么。

0 投票
2 回答
1984 浏览

ios - Swift - 带循环的多链 http 请求

从 2 天开始,我感觉我正在搜索整个网络来解决我的多个 http 请求问题。所以我的工作流程是这样的:

  1. 将图像上传到服务器

    • 响应 = 带有任务 ID 的 XML 格式
  2. 使用任务 ID 向服务器发出 GET 请求以检查此任务的状态。

    • 响应 = XML 格式,其中状态可能是“已完成”、“进行中”、“已排队”
    • 如果 Status != "Completed" - 重试第 2 步
    • 如果状态 == “已完成” - 转到第 3 步
  3. 从 resultUrl 下载结果

我最后一次尝试是用PromiseKit一种干净的方式来链接请求,就像这篇文章中描述的那样:链接多个 Alamofire 请求。但如果状态尚未完成,我不知道如何每 2-5 秒循环第二步。

此工作流程是否有推荐的解决方案?这是我的测试PromiseKit,我成功地链接了没有循环的请求:

0 投票
1 回答
1412 浏览

swift - 从一种承诺类型转换为另一种

如果我有一个返回承诺的函数并调用另一个也返回承诺的函数,是否可以在不这样做的情况下在两者之间进行转换...

如果我没有.then接听电话,编译器将无法从一种类型转换为另一种类型。

0 投票
1 回答
1672 浏览

swift - 如何沿着承诺链传递数据?

假设我想生成一个需要多个 Promise 来解决的数据集,我将如何将每个结果存储在 Promise 链中,以便我可以一次性创建最终数据集?

我想出的解决方案感觉不够优雅:

临时 IUO

使用隐式展开的选项来存储临时值。如果我忘记分配给 ,这可能会中断a

嵌套承诺

嵌套承诺并从外部范围访问值。这通过进入嵌套地狱而破坏了承诺的目的。

我头顶上的其他解决方案:使用可选字段 in CompleteData,使用var字段 inCompleteData并在链解析时分配,这些都对我没有好处。

有人能想出一种更优雅的方式来做到这一点吗?