gpt4 book ai didi

node.js - 使用 typescript 从回调内部调用方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:09 24 4
gpt4 key购买 nike

我无法从 TypeScript 中同一类的另一个方法中调用一个方法。我想从 onRequest 方法内部调用 routeTheRequest 方法,但我无法让它工作。

index.ts

import server = require("./server");

new server.MyServer();

server.ts

import http = require("http");

export class MyServer{

public constructor(){
http.createServer(this.onRequest).listen(8888);
console.log("Server has started.");
}

private onRequest(request: http.ServerRequest, response: http.ServerResponse){
var path = request.url;

this.routeTheRequest(path); // *** how do i call routeTheRequest ?? ***

response.writeHead(200, { "Content-Type": "text/plain" });
response.end();
}

private routeTheRequest(urlString: string): void{
console.log("user requested : " + urlString);
}
}

使用this.routeTheRequest 不起作用,this 失去范围并引用createServer< 的http.Server 对象 正在返回。我已经尝试了几乎所有从这些页面调用 this 的不同方式...

How can I preserve lexical scope in TypeScript with a callback function

TypeScript "this" scoping issue when called in jquery callback

最好使用非 jQuery 解决方案。谢谢

最佳答案

您可以通过像这样编写 onRequest 方法来解决此问题。请注意,您不应该像这样编写所有方法,因为它确实会消耗一些性能(它会为每个实例创建一个新函数而不是将其放在原型(prototype)上),但在这种情况下这并不重要。

class MyServer {
private onRequest = (request: http.ServerRequest, response: http.ServerResponse) => {
var path = request.url;

this.routeTheRequest(path); // *** how do i call routeTheRequest ?? ***

response.writeHead(200, { "Content-Type": "text/plain" });
response.end();
}
}

注意函数上的 lambda。

另一种方式是写:

http.createServer(this.onRequest.bind(this)).listen(8888);

编辑:我谈到它确实会降低性能但影响并不大,但我的实际意思是不要以这种方式编写每个方法(只有那些需要捕获 this 和通过将方法传递给不同的函数来调用)。

关于node.js - 使用 typescript 从回调内部调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27481030/

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