小编Dol*_*ios的帖子

Apollo GraphQL客户端:如何将乐观响应与真实响应区分为watchQuery

问题是关于突变,乐观响应和watchQuery的交互.

我有一个突变"myMutation",它有一个"optimisticResponse"和一个实现的"更新"功能.

每次我进行变异查询时,"update"函数被调用两次,第一次使用乐观响应数据,第二次使用实际数据.一切都很好,所有这些都在文档中描述.

在我的"更新"功能中,我通过使用readQuery/writeQuery方法修改"myQuery"缓存数据.

每次我修改"myQuery"缓存数据时,都会调用watchQuery(基于"myQuery")订阅.一切都很好,所有这些都在文档中描述.

但问题是我无法区分我的watchQuery是否收到乐观的响应数据或真实的响应数据.这对我来说至关重要,因为反应必须不同,因为有价值的数据部分只能由服务器提供.当我收到乐观的响应时,我应该显示一个具有特殊风格的GUI元素,我应该禁止与它进行任何交互,直到我收到真实的响应.

不幸的是,我无法解决这个问题.乍看之下,乐观和真实反应之间没有区别.我已经google了很多,并没有找到解决方案.我唯一的想法是在我的GraphQL数据中添加一个特殊字段,该字段将显示是否从服务器收到响应.但它看起来很难看,闻起来很糟糕.我相信,必须有一个简单的正确方法来克服这个问题.

apollo graphql-js apollo-client

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

Angular 2+,异步测试和setTimeout

我有一个关于测试的问题.我使用Angular 6,业力和茉莉.

我的测试是:

it(`my test`, async(() => {
    console.log('### start test');
    fixture.detectChanges();
    // call a method which has async code
    fixture.componentInstance.fakeTimeout();
    console.log('isStable', fixture.isStable());
    fixture.whenStable().then(() => {
        // here I must check smth only when all async operations are completed
        console.log('### end test');
    });
}));
Run Code Online (Sandbox Code Playgroud)

我试图以fakeTimeout不同的方式实现该方法,即:

public fakeTimeout() {
    new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('>>>>>> COMPONENT TIMEOUT!!!');
            resolve(true);
        }, 2000);
    }).then(() => {});
}
Run Code Online (Sandbox Code Playgroud)

要么

public fakeTimeout() {
    setTimeout(() => {
        console.log('>>>>>> COMPONENT TIMEOUT!!!');
    }, 2000); …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing asynchronous angular

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