我有一个名为foo的订阅方法。我看到了next每次迭代的控制台输出。我想从另一个文件中调用这个方法,并为next的每一次迭代执行一个操作。如果我尝试使用.then(),它只捕获最后一个实例(如预期的那样)。
修改这段代码以便能够为每次迭代执行操作的最佳方法是什么?我通过修改代码将回调传递给foo作为参数来实现它的工作。然而,这是最好的选择,还是有更好的办法?
// 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); });发布于 2020-02-20 17:21:15
与其将Observable转换为Promise,不如直接返回Observable,然后在另一个文件中使用subscribe而不是then。
// 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); });https://stackoverflow.com/questions/60325027
复制相似问题