Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >coffeescript中回调的作用域问题

coffeescript中回调的作用域问题
EN

Stack Overflow用户
提问于 2016-10-17 22:18:17
回答 1查看 57关注 0票数 0

我对Coffeescript/Javascript非常陌生,我正在为Atom编写一个小包。我不知道为什么create_dir函数对内部函数不可见。我怀疑有某种范围的问题,

代码语言:javascript
运行
AI代码解释
复制
{CompositeDisposable, Directory, File} = require 'atom'

module.exports = ImageAssistant =
    subscriptions: null

    activate: (state) ->
        # Events subscribed to in atom's system can be easily cleaned up
        # with a CompositeDisposable
        @subscriptions = new CompositeDisposable

        # Register command that toggles this view
        @subscriptions.add atom.workspace.observeTextEditors((editor) ->
            textEditorElement = atom.views.getView(editor)

            # on drag and drop event
            textEditorElement.addEventListener("drop", (e) ->
                e.preventDefault?()
                e.stopPropagation?()

                editor = atom.workspace.getActiveTextEditor()
                return unless editor

                dropped_files = e.dataTransfer.files
                target_file = editor.getPath()

                fs = require 'fs'
                path = require 'path'
                crypto = require "crypto"

                assets_path = path.join(target_file, "..", "assets")

                for f in dropped_files
                    if fs.lstatSync(f.path).isFile()
                        buffer = new Buffer(fs.readFileSync(f.path))
                        md5 = crypto.createHash 'md5'
                        md5.update(buffer)

                        img_filename = "#{path.parse(target_file).name}-#{md5.digest('hex').slice(0,8)}#{path.extname(f.path)}"
                        console.log img_filename

                        assets_dir = new Directory(assets_path)

                        @create_dir assets_dir, ()=>
                            fs.writeFile path.join(assets_dir, img_filename), buffer, 'binary', ()=>
                                console.log "Copied file over to #{assets_dir}"
                                editor.insertText "![](#{path.join("assets", img_filename)})"

                        return false
            )
        )

    create_dir: (dir_path, callback)=>
        dir_handle = new Directory(dir_path)

        dir_handle.exists().then (existed) =>
            if not existed
                dir_handle.create().then (created) =>
                    if created
                        console.log "Creation of #{dir_path} successful"
                        callback()
            else
                callback()

    deactivate: ->
        @subscriptions.dispose()

我所犯的错误:

代码语言:javascript
运行
AI代码解释
复制
 atom-markdown-image-assistant.coffee:43 Uncaught TypeError: _this.create_dir is not a function(anonymous function) @ atom-markdown-image-assistant.coffee:43
    /Applications/Atom.app/Contents/Resources/app.asar/node_modules/jquery/dist/jquery.js:8630 GET https://atom.io/api/packages/markdown-image-assistant 404 (Not Found)send @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/jquery/dist/jquery.js:8630jQuery.extend.ajax @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/jquery/dist/jquery.js:8166(anonymous function) @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/user-utilities.js:258module.exports.getLatestPackageData @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/user-utilities.js:257module.exports.checkPackageUpToDate @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/user-utilities.js:271NotificationElement.renderFatalError @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/notification-elem…:204NotificationElement.render @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/notification-elem…:159NotificationElement.initialize @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/notification-elem…:50(anonymous function) @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/main.js:89module.exports.ViewRegistry.createView @ /Applications/Atom.app/Contents/Resources/app.asar/src/view-registry.js:119module.exports.ViewRegistry.getView @ /Applications/Atom.app/Contents/Resources/app.asar/src/view-registry.js:86Notifications.addNotificationView @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/main.js:126(anonymous function) @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/main.js:27module.exports.Emitter.simpleDispatch @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:25module.exports.Emitter.emit @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:125module.exports.NotificationManager.addNotification @ /Applications/Atom.app/Contents/Resources/app.asar/src/notification-manager.js:54module.exports.NotificationManager.addFatalError @ /Applications/Atom.app/Contents/Resources/app.asar/src/notification-manager.js:45(anonymous function) @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/notifications/lib/main.js:53module.exports.Emitter.simpleDispatch @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:25module.exports.Emitter.emit @ /Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:125(anonymous function) @ /Applications/Atom.app/Contents/Resources/app.asar/src/atom-environment.js:837

我尝试按照这里的建议将所有->更改为=>Multiple Callbacks in CoffeeScript,但这并没有解决函数未定义的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 13:14:47

这是由于使用一个普通的对象而不是类,请参见@muistooshort的回答:Anonymous function works as callback but defined function does not

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40100881

复制
相关文章
异步与回调/函数的作用域链
程序里面所有的任务,可以分成两类:同步任务(synchronous)和异步任务(asynchronous)。
代码之风
2018/10/31
1.8K0
什么是回调地狱?如何解决回调地狱问题_地狱回调
这个问题呢,需要从Node.js的API说起,这里就会有人问了?博主你不是说回调地狱的问题吗,怎么说到API了,别急,看博主一步一步的解释给你听:
全栈程序员站长
2022/11/15
3.3K0
(三)回调 ref 中调用次数问题
# 🍇一、回调形式的 ref 的调用次数 class Demo { showInfo = () => { let {input} = this alert(input.value) } render() { return ( <div> <input ref={(currentNode) => this.input = currentNode; console.log('@',
老怪兽
2023/02/22
7390
(三)回调 ref 中调用次数问题
JavaScript中的作用域和作用域链
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。可能这两句话并不好理解,我们先来看个例子:
刘亦枫
2020/03/19
2.3K0
JavaScript中的作用域和作用域链
回调函数究竟有什么作用??
函数指针:其本质是一个指针变量,该指针指向这个函数。简单来说,函数指针就是指向函数的指针。
Rice加饭
2022/05/10
7640
回调函数究竟有什么作用??
Rust中的作用域及作用域的规则
所有权是 Rust 最独特的特性,它使 Rust 能够在不需要 GC 的情况下保证内存安全。在本章中,我们将讨论所有权以及几个相关特性:借用/切片,以及 Rust 如何在内存中布局数据。
端碗吹水
2022/06/02
4K1
Rust中的作用域及作用域的规则
SystemVerilog中的callback(回调)
在第二次systemverilog实验中,我看到有同学用到了callback函数,今天就是简单讲讲这个方法。
数字IC小站
2020/06/30
2.7K0
java 中的异步回调
异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图: 先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作
菩提树下的杨过
2018/01/18
3.3K0
java 中的异步回调
iOS中的「回调(callback)」
本文主要参考:《Object-C 编程 Big Nerd Ranch Guide》一书第24章
iOS Development
2019/02/14
3.6K0
javascript异步中的回调
我们之前介绍了javascript异步的相关内容,我们知道javascript以同步,单线程的方式执行主线程代码,将异步内容放入事件队列中,当主线程内容执行完毕就会立即循环事件队列,直到事件队列为空,当用产生用户交互事件(鼠标点击,点击键盘,滚动屏幕等待),会将事件插入事件队列中,然后继续执行。 处理异步逻辑最常用的方式是什么?没错这就是我们今天要说的---回调
陌上寒
2019/04/02
2.2K0
javascript异步中的回调
回调函数的后面加个bind(this)的作用是什么回调函数的后面加个bind(this)的作用是什么
回调函数的后面加个bind(this)的作用是什么 学习reactjs的tutorial是看到: componentDidMount: function () { this.serverRequest = $.ajax({ url: this.props.url, data: {}, type: 'GET', dataType: 'json',
一个会写诗的程序员
2018/08/17
1.4K0
js中的作用域
相信自从es6出来之后,你一定多少知道或者已经在项目中实践了部分的块级作用域,在函数或者类的内部命名变量已经在使用let了,但是你知道它真正的作用是什么吗?又是因为什么我们要用这个块级作用域,本文与你一起探讨块级作用域的场景以及所有细节问题。
RobinsonZhang
2018/08/28
3.3K0
基于JavaScript作用域链的性能调优
JavaScript作用域和作用域链,说起来很简单,但是细细分析,大有玄机。只能真正理解了作用域链原理,才能写出更高效的JavaScript代码。下面,让我们慢慢走近这个并不神秘的区域......
娜姐
2022/05/13
2360
基于JavaScript作用域链的性能调优
【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )
在 Groovy 脚本中 , 定义两个变量 , 一个使用 def 声明 , 一个直接声明变量 ;
韩曙亮
2023/03/30
1.4K0
【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )
支付宝回调问题
跟我项目交接的那个人也不能说是坑,只能说他当初在订单方面也没有理解到位罢了 不过那哥们着实挺牛逼的  支付宝回调有些坑,参数api  回调参数支付价格明明是total_amount,实际却不是这个。还
陈灬大灬海
2018/09/12
1K0
支付宝回调问题
用Async解决回调问题
第一次接触编程时,我们就知道了一块代码是从头执行到尾的。 这就是所谓的同步编程:每个操作完成之后,后面的才会继续。 对于不花计算机太多时间的操作,比如数字相加、操作字符串、或变量赋值等等,这种执行过程没什么问题。
前端达人
2018/10/18
1.3K0
用Async解决回调问题
JavaScript几个作用域问题
1、 var a = 0 ; function f(){ a = 1; console.log(a); //全局变量a } console.log(a); //全局变量af();  输出结果为:1 1 ,function中未声明直接赋值的a为作用域window的全局变量,很好理解 2、 var a = 0; function test(){ var a; console.log(a); //局部变量a a = 1; console.log(a);
寒月十八
2018/01/30
5460
ajax中回调的几个坑
在前端开发中,经常要用ajax去拿后台接口返回的数据,总结几个ajax的回调的常见问题,供大家参考爬坑。
全栈程序员站长
2022/07/21
7840
JavaScript中的回调函数(callback)
被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数。
刘亦枫
2020/03/19
7.3K0
spring中Bean的作用域
在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
MickyInvQ
2020/09/27
8310

相似问题

Coffeescript回调作用域问题

10

在Fancybox回调中尝试调用CoffeeScript方法时的作用域问题

23

Coffeescript从回调方法获取适当的作用域

20

回调的作用域问题

11

NodeJS回调作用域问题

410
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档