gpt4 book ai didi

javascript - promise "then"方法内的范围更改

转载 作者:行者123 更新时间:2023-11-30 08:02:29 24 4
gpt4 key购买 nike

我编写了以下程序,每 N 毫秒处理一次目录中的所有文件:

fs = require "fs"
Q = require "q"

class FileProcessor
constructor: (options) ->
@dir = options.dir
@delay = options.delay

processFiles: ->
Q.nfcall fs.readdir, @dir
.then (files) -> Q.all files.map (file) -> @processFile file # <-- Error!
.then -> Q.delay @delay
.then -> @processFiles()
.done()

processFile: (file) ->
deferred = Q.defer()

# Does some stuff.

return deferred.promise

fp = new FileProcessor(dir: "photos", delay: 1000)
fp.processFiles()

在第 11 行我得到这个错误:

TypeError: undefined is not a function

@processFile 似乎不在范围内。如何解决这个问题?

最佳答案

CoffeeScript 包含保留词汇上下文的“粗箭头”。 (就像 ES6 中的 JavaScript)。

每当您想保留 this 值时,请使用 => 而不是 ->:

@x = 5
someFnCall someArg
.then (result) => console.log @x # this will work

(请注意,在高度并发和密集的工作中,这可能会很慢 - 您可能想要使用支持上下文的 promise 库而不是像 Bluebird)

关于javascript - promise "then"方法内的范围更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24475308/

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