标签: dispatch

为什么我的 try catch 块不处理调度错误?

我无法在我的 try catch 块中得到被拒绝的承诺,它的响应始终在 OriginalPromiseResult 中

这是我从 API 获取一些数据的切片:

export const getData = createAsyncThunk(
  'user/getData',
  async (headers, { rejectWithValue }) => {
    try {
      return await httpService.getData(headers)
    } catch (err) {
      console.error(e)
      return rejectWithValue(err.response.data)
    }
  }
)
Run Code Online (Sandbox Code Playgroud)

这是我的组件:

const dispatch = useDispatch()

const myCallback = async (data) => {
    try {
      const originalPromiseResult = await dispatch(getData(data))
    } catch (error) {
      console.log('error = ', error)
    }
}
Run Code Online (Sandbox Code Playgroud)

dispatch reactjs redux

2
推荐指数
1
解决办法
4637
查看次数

Scala中类似C#的信号或AS3类事件?

如何在Scala中实现C#样式信号或AS3样式事件?我的意思主要是观察者模式.发送变更事件.谢谢.

或者(甚至更好)是否有任何库/框架可以做到这一点?

events signals scala dispatch

1
推荐指数
1
解决办法
440
查看次数

Dispatch_async和UI

我发出警报通知用户有关保存操作的信息,我将其添加到查看,保存一些图像并解除警报.然而,它并没有像我希望的那样工作.首先在控制台中查看下面的代码,我得到"保存..."然后"发送".我想得到相反的效果首先得到"dispath"然后"保存.."(所以在屏幕上写警报,然后保存在后台,最后解除警报).但我改变了imageView1的图像,所以我不能移出dispath_async合并,因为它是一个UI动作..然后怎么办呢?我需要首先合并图像并在它之后保存它们以及所有这些计算时间以保持警惕.

//adding alert to view
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
^{
    dispatch_async(dispatch_get_main_queue(), ^{
        //i want this to complete->
        imageView1.image = [self merge:imageView1.image and:imageView2.image];
        NSLog(@"dispatch");
    });

    //and then to do this action->
    UIImageWriteToSavedPhotosAlbum(imageView1.image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
    NSLog(@"saved..");

    dispatch_async(dispatch_get_main_queue(), ^{
        [alert dismissWithClickedButtonIndex:0 animated:YES];
    });
});
Run Code Online (Sandbox Code Playgroud)

iphone objective-c dispatch

1
推荐指数
1
解决办法
5822
查看次数

调度字典,但将不同的参数传递给函数

我正在像这样在python中使用调度模式....

    ok = parse_qsl(urlparse(u).query, keep_blank_values=True)

    eventType = (ok[9][1])
    nName = (ok[10][1])
    hName = (ok[11][1])
    cName = (ok[12][1])

    def newChannel(cName):
        queue = j.queue(cName)
        r = queue.add_subscribers(*[subscriberCreateChanTable, subscriberSortScenes])

    def newNetwork(hName):
        queue = j.queue(hName)
        r = queue.add_subscribers(*[subscriber1a])

    def loginError(nName):
        pass

    action = {'newChannel': newChannel,
             'newNetwork': newNetwork , 'loginError': loginError}

    handler = action.get(eventType)
    handler(cname)
Run Code Online (Sandbox Code Playgroud)

如何将不同的函数参数传递给映射的函数,因此,如果eventType =“ newChannel”,则newChannel函数将使用cname进行调用,但是如果eventType =“ newNetwork”,则如何使用hname变量来调用它。

只是调用handler(hname)?

    handler(hname)
    handler(cname)
    handler(nName)
Run Code Online (Sandbox Code Playgroud)

python design-patterns asynchronous event-handling dispatch

1
推荐指数
1
解决办法
1720
查看次数

清除方法中的静态变量

在我的一个方法中,我使用的是dispatch_once,我为其创建了一个静态变量.该方法按预期工作,单独运行时单元测试成功通过.但是当我同时运行测试时,其中一个测试失败,因为方法中的静态变量保持了值.

我的方法:

+ (NSString *)myMethod
{
    static NSString *dayOfTheWeek;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
       // Do something.

        dayOfTheWeek = @"Monday";

        if (!dayOfTheWeek)
        {
            dayOfTheWeek = @"Sunday";
        }
    });

    return dayOfTheWeek;
}
Run Code Online (Sandbox Code Playgroud)

题:

所以我有单元测试来测试"星期一"和另一个单元测试来测试"星期天".如果我在XCODE上单独执行这两个测试,它们会通过,但是当我一起执行它们时,"Sunday"的测试失败,因为我的静态变量仍然保持值"Monday".

有没有办法可以清除方法级静态变量只是为了测试目的?或者还有其他方法可以成功执行这两项测试吗?

static objective-c dispatch ios ios7

1
推荐指数
1
解决办法
449
查看次数

Kotlin的动态/双重调度有哪些限制?

我刚刚开始探索Kotlin,我很好奇它超越了Java的核心动态绑定/调度语义.

假设我编写的代码看起来像这样:

    class Animal {
        fun add(x:Animal) = Animal()
    }

    object Horse : Animal
    object Donkey : Animal
    object Mule : Animal

    fun Horse.add(x:Horse) = Horse()
    fun Horse.add(x:Donkey) = Mule()

    fun main(args : Array) {
        val h:Animal = Horse
        val d:Animal = Donkey
        val child = h + d
    }

基于上面的代码 - 我可以期待什么?我是否在运行时失败,因为Horse没有实现添加(动物)?它是否可以在上述性质的调用中准确区分它们,其中被比较的值的编译时类型是Animal(至少如编写),但它们的运行时类型更具体?如果我们使用var而不是val,它会改变什么吗?

提前致谢.

编辑:修改核心代码 - 我看到第一响应者强调的问题,我没有直接思考.显然我还没有编译过这个,我仍然在概念层面进行探索.

另外,我会在实际的编译器中给它一个镜头,但是我担心会出现它工作的情况和其他不基于我不完全理解的某些标准的情况.我无法找到关于如何在Kotlin中实现动态调度的参考文档(对于Java来说也不确定它是什么;几个月前我写了一些我认为可以基于JVM文档工作的东西,但它没有不,我从来没有机会探究到底为什么.

无论如何再次感谢!

dynamic dispatch kotlin

1
推荐指数
1
解决办法
1141
查看次数

React Redux - Dispatch检索输入值

我有以下React视图/渲染功能:

let BaseSalaryView = ({ counter, onChange }) => (
    <div>
        <input type="text"
            placeholder="Annual Salary"
            value={counter}
            onChange={() => onChange(counter)} />
        <span>Try: {counter}</span>
    </div>
)
Run Code Online (Sandbox Code Playgroud)

我试图找出如何将刚改变的值传递到我的onChange调度处理程序中.

尝试

我尝试了以下但是它们都是未定义的.

onChange={() => onChange(this.input.value)}> 
onChange={() => onChange(input.value)}> 
onChange={() => onChange(value)}> 
Run Code Online (Sandbox Code Playgroud)

其余的代码

const mapDispatchToProps = (dispatch) => {
    return {
        onChange: (counter) => {
            dispatch(baseSalaryChange(counter)) // Need the input v alue here
        }
    }
}

export function baseSalaryChange(baseSalary) {
  return { type: BASE_SALARY_CHANGED, baseSalary }
}
Run Code Online (Sandbox Code Playgroud)

调用操作,但coutner始终设置为初始值.

javascript dispatch reactjs react-redux

1
推荐指数
1
解决办法
1734
查看次数

使用dispatch_async时EXC_BAD_ACCESS

我们最近修改了我们的线程机制,支持dispatch_async在大多数地方使用'(在做了很多关于NSOperation和dispatch_async的阅读之后)*.然后我们的代码开始在代码的各个部分与EXC_BAD_ACCESS崩溃,总是在dispatch_async(queue,...)部分,没有明确的模式.通常在20分钟后发生--2小时.

我们的dispatch_async块用于通知听众,如下所示:

NSMutableSet *_listeners; // Initialised elsewhere and filled with interested listeners
void(^block)(id listener); // Block to execute

@synchronized(_listeners) {
  for (id listener in _listeners) {
    dispatch_async_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // We used different queues for different listeners, but showing only one type of queue here for brevity
    dispatch_async(queue, ^{ // CRASHING LINE
      block(listener);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

常见的症状是:

  • 发生在iOS10上,从未在iOS8上发生过
  • 在调试期间发生但从未报告过生产

(这是一个自我回答的问题)

*我们喜欢简单dispatch_async,不需要阻止/依赖功能,NSOperationQueue我们很快就会转向C++,所以想保持低水平.

exc-bad-access dispatch grand-central-dispatch ios dispatch-async

1
推荐指数
1
解决办法
829
查看次数

如何在JAVA中使用带有重载的Double Dispatch?

我正在尝试在JAVA中创建一个双重调度以使用重载方法。

public abstract class ComposantOrdi {
    protected void equiv(ComposantOrdi c){
        Equivalence.equiv(this, c);
    }
}

public class Montage extends ComposantOrdi{
    protected void equiv(Montage montage){
        Equivalence.equiv(this, montage);
    }
}

public class Equivalence {
    public static void equiv(Montage m, ComposantOrdi c){
        System.out.println("Montage - ComposantOrdi");
    }

    public static void equiv(Montage m, Montage c){
        System.out.println("Montage - Montage");
    }

    public static void equiv(ComposantOrdi m, ComposantOrdi c){
        System.out.println("ComposantOrdi - ComposantOrdi");
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个例子,我创建两个对象

Montage m2 = new Montage();
ComposantOrdi m3 = new Montage();

m3.equiv(m2);
m3.equiv(m3);
m3.equiv((Montage)m3);
Run Code Online (Sandbox Code Playgroud)

结果是: …

java double design-patterns concept dispatch

1
推荐指数
1
解决办法
569
查看次数

斯威夫特DispatchGroup任务完成前通知

DispatchGroup用来执行任务,但是group.notify在任务完成之前被调用。

我的代码:

let group = DispatchGroup()
let queueImage = DispatchQueue(label: "com.image")
let queueVideo = DispatchQueue(label: "com.video")
queueImage.async(group: group) {
    sleep(2)
    print("image")
}

queueVideo.async(group: group) {
    sleep(3)
    print("video")
}

group.notify(queue: .main) {
    print("all finished.")
}
Run Code Online (Sandbox Code Playgroud)

日志:

all finish.
image
video
Run Code Online (Sandbox Code Playgroud)

dispatch ios swift

1
推荐指数
1
解决办法
3749
查看次数