我正在处理一个项目,并且在递归函数中遇到了 setTimeout()函数。我对承诺很新,所以我可能也没有正确地实施这部分。
该计划应该:
Bassicly我试图每隔10秒从一个流中进行轮询。
代码看起来像这样:
class XYZ {
myFunction(commands, intervall, i) {
var self = this;
var promise = new Promise((resolve, reject) => {
// I have to write to a Stream and listen for an answer
self.dataStream.write(someData, () => {
self.dataStream.addListener('readable', handleStuff);
});
// Function that handles incoming data from the Stream
var handleStuff = function () {
if (self.dataStream == someFormat) {
self.dataStream.write(commands[i]);
} else {
self.dataStream.removeListener('readable', hadleStuff);
resolve(self.dataStream.read());
}
}
});
// Resolving by sending msg and calling recursivly
promise.then((message) => {
self.send(message);
if (i + 1 > resetValue) {
setTimeout(() => {
self.myFunction(commands, intervall, 0);
}, intervall);
} else {
self.myFunction(commands, intervall, i + 1);
}
});
}
};
我称之为:
var myXYZ = new XYZ();
myXYZ.myFunction(myCommands, 10000, 0);
现在当我运行初始调用时,它运行正常,并将消息从dataStream发送到另一个进程。但是当调用 setTimeout()函数时,函数会被"卡住"在第一次将数据写入流中并且未解决的承诺都没有被拒绝。 我的猜测是我在我的代码中混淆了上下文(this / self)。遗憾的是没有错误信息,所以我认为我的逻辑是错误的。如果我只是删除 setTimeout()函数,它也可以正常工作。我现在的问题是 setTimeout()如何改变代码运行的上下文?