将 set_timeout 与 Sublime Text 3 API 一起使用

nob*_*be4 1 python settimeout sublimetext3 sublime-text-plugin

我正在尝试在插件中使用(如标题所示)sublime text 3 的 set_timeout 函数。
据我了解,在许多情况下需要使用 lambda 函数。所以我尝试了这个简单的测试:

class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
    def run(self):
        for x in range(1,10):
            sublime.set_timeout(lambda : print(x), 4000)
Run Code Online (Sandbox Code Playgroud)

所以我希望我一次打印一个数字,每个数字之间有 4 秒的延迟。如 Sublime 3 API 中所述:

在给定的延迟(以毫秒为单位)后在主线程中运行回调。具有相同延迟的回调将按添加顺序运行。

但相反,我有 9 '9' 在 4 秒后打印。因此,基于循环的第一次迭代,同时打印所有 '9'。
你知道我能做些什么来解决这个问题吗?

提前致谢 !

编辑:我发现这是有效的(嗯,打印 '9' 9 次,每个之间有 1 秒的延迟:

class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
    def run(self):
        for x in range(1,10):
            sublime.set_timeout(lambda : print(x), x*1000)
Run Code Online (Sandbox Code Playgroud)

但问题仍然存在:它只打印出 '9' ....

Dec*_*eck 5

要打印不同的数字,请更改您的插件脚本

class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
    def run(self, edit):
        for x in range(1,10):
            sublime.set_timeout(lambda x=x: print(x), x*1000)
Run Code Online (Sandbox Code Playgroud)

因为所有 lambda 函数都引用相同的函数,x并且当它被执行时,x值会达到9.