gpt4 book ai didi

javascript - Ember.JS并发任务,perform()不是函数

转载 作者:行者123 更新时间:2023-12-02 05:58:45 25 4
gpt4 key购买 nike

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

call :

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';

call :
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-concurrency-decorators中。你需要ember install ember-concurrency-decorators
然后你可以做
import { task } from 'ember-concurrency-decorators';
要使用它。

另外,如果您不想其他依赖项,可以使用different syntax

import { task } from 'ember-concurrency';

class Foo {
@(task(function*() {
// ...
}).restartable())
doStuff;

executeTheTask() {
this.doStuff.perform();
}
}

调用任务的语法是: this.socketConnect.perform(endpoint, authToken);
由于您没有直接调用socketConnect,因此您想调用ember并发性为您生成的方法。

关于javascript - Ember.JS并发任务,perform()不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61878673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com