首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >承诺与订阅相结合

承诺与订阅相结合
EN

Stack Overflow用户
提问于 2020-02-20 16:56:06
回答 1查看 47关注 0票数 1

我有一个名为foo的订阅方法。我看到了next每次迭代的控制台输出。我想从另一个文件中调用这个方法,并为next的每一次迭代执行一个操作。如果我尝试使用.then(),它只捕获最后一个实例(如预期的那样)。

修改这段代码以便能够为每次迭代执行操作的最佳方法是什么?我通过修改代码将回调传递给foo作为参数来实现它的工作。然而,这是最好的选择,还是有更好的办法?

代码语言:javascript
复制
// MySubscriptions.js
import {execute} from 'apollo-link';
import {SubscriptionClient} from 'subscriptions-transport-ws';
import {WebSocketLink} from 'apollo-link-ws';

const link = new WebSocketLink(new SubscriptionClient('blah'));

async function foo(someQuery) {
   return new Promise((resolve, reject) => {
     execute(link, {query: someQuery })
       .subscribe({
         next: (result) => {
           console.log('Resolving', result);
           resolve(result);
         },
         error: (err) => reject(err);
         complete: () => console.log('done');
       });
  });
}

export default {
  runTestSubscription: () => foo('MyTestLink'),
};

// MyMainFile.js
import MySubscriptions from 'MySubscriptions.js'
MySubscriptions.runTestSubscription().then((result) => { console.log('Then', result); });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-20 17:21:15

与其将Observable转换为Promise,不如直接返回Observable,然后在另一个文件中使用subscribe而不是then

代码语言:javascript
复制
// MySubscriptions.js
import {execute} from 'apollo-link';
import {SubscriptionClient} from 'subscriptions-transport-ws';
import {WebSocketLink} from 'apollo-link-ws';

const link = new WebSocketLink(new SubscriptionClient('blah'));

function foo(someQuery) {
  const obs = execute(link, { query: someQuery });
  obs.subscribe({
    next: (result) => console.log('Resolving', result),
    complete: () => console.log('done')
  });
  return obs;
}

export default {
  runTestSubscription: () => foo('MyTestLink'),
};

// MyMainFile.js
import MySubscriptions from 'MySubscriptions.js'
MySubscriptions.runTestSubscription().subscribe((result) => { console.log('Then', result); });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60325027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档