我有3个WinJSpromise,我想按顺序调用,直到其中一个promise完成而没有错误。
伪代码:
var promises = [promise1,promise2,promise3];
promises.each (promise)
promise.then (result) return result
当然,我不能使用数组中的每个。因为这将并行执行promise。
所以首先迭代应该是顺序的,如果promise返回错误,下一个promise应该尝试,否则它应该返回成功promise的值。如果没有promise返回成功,那么整个循环应该指示失败。
基本上你要
return promise1.catch(function(err) {
return promise2.catch(function(err) {
return promise3;
});
})
或(扁平)
makePromise1().catch(makePromise2).catch(makePromise3);
通过使用reduce
,您可以轻松地从一系列待试函数动态创建此链:
return promiseMakers.reduce(function(p, makeNext) {
return p.then(null, makeNext);
}, WinJS.Promise.wrapError());
或者如果你真的有一个promise数组(已经开始并行运行的任务):
return promises.reduce(function(p, next) {
return p.then(null, function(err) {
return next;
});
}, WinJS.Promise.wrapError());
(很像Promise.any
,只是依次等待)
我有一个我正在使用的API,它每5秒钟接受一次呼叫,比它不会响应的任何时间都多。在每次调用中,它将在一批中接受5条记录。我有一个1000条记录的列表,我需要使用api来检查,所以我想做的是每5秒钟把我的记录列表分成5个批次发送给它。 我可以让它大部分工作,但我不能计算的一点是分解记录列表,这是一个成批数组,你知道怎么做吗? 这是我在下面使用的代码,但是它每5秒钟输出一次数组的每个单独部分,而不是每
问题内容: 我正在尝试实现自动补全功能,但是找不到在Swift中可用的示例。下面,我打算转换Ray Wenderlich的自动完成教程 和2010年的示例代码。最后,代码进行了编译,但是没有显示包含可能完成的表格,而且我没有经验来了解为什么它未被隐藏shouldChangeCharactersInRange。 问题答案: 用下面的内容替换您的函数内容。希望对您有帮助。
生成器迭代 手动迭代生成器,递归执行 AsyncTask::next,调用Generator::send方法将将yield值作为yield表达式结果。 yield表达式可能是一个异步调用,我们这里为之后把异步调用的结果作为yield表达式结果铺垫。 yield外侧括号在PHP5必须,PHP7不需要。 如, $ip = (yield async_dns_lookup(...) ); ^
问题内容: 这是我在Swift(略作修改)中发布的遍历视图控制器层次结构的可能解决方案: 该方法应遍历父视图控制器层次结构,并返回给定类的第一个实例;如果未找到,则返回nil。 但这是行不通的,我也不知道为什么。标有的可选绑定 始终会成功执行 ,因此即使第一个父视图控制器不是的实例,也将返回它。 这很容易被复制:创建一个从在Xcode6通用的“iOS的主从应用程序”模板的项目,下面的代码添加到该的
问题内容: 我有一个脚本,该脚本遍历包含要访问的URL:s并截取其屏幕截图的文本文件。 所有这一切都完成且简单。该脚本会初始化一个类,该类在运行时会创建列表中每个站点的屏幕快照。某些站点的加载时间非常非常长,而某些站点可能根本无法加载。因此,我想将函数包装在一个超时脚本中,以使该函数在10秒内无法完成时返回。 我对最简单的解决方案感到满意,也许设置一个异步计时器,无论函数内部实际发生什么,该计时器
在搜索了很多类似问题的答案后,我仍然没有找到适合我需要的解决方案。 基本上,我有一个while循环,我想等待repaint()方法完成,然后再开始该循环的另一次迭代。 更详细地说,我有一些片段是在扩展JComponent的MapPanel类的paintComponent方法中绘制的。然后,当用户单击按钮时,算法开始搜索从“上部”线段开始的交点(使用endpoint作为事件点)。这个算法基本上就是我