我有一个场景,其中一个类容纳两个实例变量,这些变量是相互排斥的。一次只能实例化。确切地说,我有一个承诺课(试图向Pharo增加承诺(,并拥有PromiseError和PromiseValue实例变量。然后,我想实现"然后:捕获:"的方法。此方法应如下:
promiseObject := [10/0] promiseValue.
promiseObject then : [ : result | Transcript crShow : result ]
catch : [ : failure | Transcript crShow : failure ] .
我有一个想法,即如何实现将块作为接受块的参数,该方法接受一个块,而块接受了一个参数。我下面的尝试显然不起作用,但我不知道如何使其起作用。
then:aBlock catch: anotherBlock
|segment|
promiseValue ifNil: [ segment := promiseError ] ifNotNil: [ segment := promiseValue ].
promiseValue ifNil: [ segment := promiseValue ] ifNotNil: [ segment := promiseError ].
aBlock value:segment.
anotherBlock value: segment
这应该与trycatch块类似地工作。
您是否尝试过类似的事情?
then: aBlock catch: anotherBlock
promiseError notNil ifTrue: [^anotherBlock value: promiseError].
^aBlock value: promiseValue
请注意,代码不依赖promiseValue
为nil
,因为nil
可能是promise
的有效答案。但是,如果有一些promiseError
,我们知道promise
失败了,否则成功了。
当然,在这里,我假设一旦promise
成功或未能成功完成,此消息将发送。如果不是这种情况,则代码应在promise
信号量上等待。