Moustrap node.js;Uncaught TypeError: обратный вызов не является функцией - PullRequest
0 голосов
/ 24 февраля 2019

Я недавно начал использовать электрон для создания приложения для бесплатного сочинения музыки.К сожалению, при попытке установить глобальные сочетания клавиш для него с помощью мышеловки, я получил ошибку Uncaught TypeError: callback is not a function.Когда я использую инструменты разработчика на электронном устройстве, это показывает, что проблема связана с исходным кодом мышеловки, поэтому я не уверен на 100%, где находится ошибка, однако я знаю, что ошибка появляется только тогда, когда одна из мышеловоксвязка клавиш активирована.Вот мой код:

const { dialog } = require('electron').remote
const ipc = require('electron').ipcRenderer
const Vex = require('vexflow')
const Mousetrap = require('mousetrap');

//Global Variables
var keylist = {'z': 'a/4', 'x': 'b/4', 'c': 'c/4', 'v': 'd/4', 'b': 'e/4', 'n': 'f/4', 'm': 'g/4', 'a': 'a/5', 's': 'b/5', 'd': 'c/5', 'f': 'd/5', 'g': 'e/5', 'h': 'f/5', 'j': 'g/5', 'q': 'a/6', 'w': 'b/6', 'e': 'c/6', "r": 'd/6', 't': 'e/6', 'y': 'f/6', 'u': 'g/6'}
VF = Vex.Flow;

var canvas = document.getElementById("myCanvas");
var renderer = new Vex.Flow.Renderer(canvas, Vex.Flow.Renderer.Backends.CANVAS);     

// Use the renderer to give the dimensions to the SVG

// Expose the context of the renderer
var context = renderer.getContext();

// And give some style to our SVG
context.setFont("Arial", 10, "").setBackgroundFillStyle("#eed");


/**
 * Creating a new stave
 */
// Create a stave of width 400 at position x10, y40 on the SVG.
var stave = new VF.Stave(10, 40, 400);
// Add a clef and time signature.
stave.addClef("treble").addTimeSignature("4/4");
// Set the context of the stave our previous exposed context and execute the method draw !
stave.setContext(context).draw();

var chord = []
function newnote (e) {
    console.log('triggered')
    var code = (e.keyCode ? e.keyCode : e.which);
    //checks to see if the key is a shortcut, and isnt enter/return
    if (e in keylist && code !== 13) { 
        let note = keylist[e]
        chord.push(note)
    }
    //if the key is enter, then the chord is put no the staff and chord is cleared
    if (code == 13) {
        stave.VF.Formatter.FormatAndDraw(context, stave, notes);
         chord = []
    }
    else { }
}

Mousetrap.bind('x', newnote('x', stave, chord))
//etc.

Спасибо за любую помощь

1 Ответ

0 голосов
/ 24 февраля 2019

Я не уверен, что эти параметры представляют здесь, но я думаю, что должно быть что-то вроде этого:

Mousetrap.bind('x', newnote);

Второй параметр должен быть функцией, но то, как вы его указали выше, является результатомвызова функции, так что вы получаете эту ошибку.

...