Ember.JS并发任务,perform() 不是一个函数



我试图将函数转换为任务。这是原始代码:

叫:

this.socketConnect(endpoint, token);

功能:

socketConnect = async (token, endpoint) => {
this.socket = new WebSocket(endpoint + '?auth=' + token);
this.socket.addEventListener('open', () => {
this.socket.addEventListener('message', event => this.handleMessage(event));
this.socket.addEventListener('close', event => this.retryConnection(event, endpoint));
});
}

我一直在遵循实现 Ember 任务的结构。这一切都可以毫无问题地编译,但是当它被调用时,它会输出 this.socketConnect(...( 不是一个函数。在此之前,我没有下面的返回,它输出的是 this.socketConnect 不是一个函数。这是我当前任务的代码。

进口:

import { task } from 'ember-concurrency';

叫:

this.socketConnect(endpoint, authToken).perform();

功能:

@task *socketConnect(endpoint, token) {
yield async () => {
this.socket = new WebSocket(endpoint + '?auth=' + token);
this.socket.addEventListener('open', () => {
this.socket.addEventListener('message', event => this.handleMessage(event));
this.socket.addEventListener('close', event => this.retryConnection(event, endpoint));
});
return;
};
}

这是新的,所以我猜我错过了一些小东西。它与其他用途相匹配。另外,如果有人可以帮助将websocket生成功能切换到任务的好处?任何帮助将不胜感激,谢谢。

@task

装饰器还不是官方ember-concurency包的一部分。正式版本目前存在于 ember 并发装饰器中。 您需要ember install ember-concurrency-decorators

然后你可以做

import { task } from 'ember-concurrency-decorators';

使用它。

或者,如果您不需要其他依赖项,可以使用其他语法。

import { task } from 'ember-concurrency';
class Foo {
@(task(function*() {
// ...
}).restartable())
doStuff;
executeTheTask() {
this.doStuff.perform();
}
}

要调用该任务,语法为:this.socketConnect.perform(endpoint, authToken);

由于您不直接调用套接字连接,因此您希望调用 ember 并发为您生成的方法。

相关内容

  • 没有找到相关文章

最新更新