Fabric.JS не работает с обещаниями или обратными вызовами - PullRequest
0 голосов
/ 15 мая 2018

Поэтому я использую библиотеку Node.JS / NPM с именем fabric.js (Node.JS, не для браузера) , которая работает странным образом.

//Make a new Canvas object (`fabric.createCanvasForNode` is not a constructor)
var canvas = new fabric.StaticCanvas(null, {width: 200, height: 200})

  //Make a new Rectangle
  var rect = new fabric.Rect({
    left: 100,
    top: 100,
    width: 100,
    height: 50,
    fill: "red"
  })

//Put the Rectangle on the Canvas
canvas.add(rect)

//Save the image as a PNG
canvas.createPNGStream().pipe(fs.createWriteStream(__dirname + "/output.png"))

Единственная проблема заключается в том, что canvas.add() - это функция, которая должна возвращать обещание, но не возвращает. Эта функция не мгновенная, но уже не работает с Promises (canvas.add(...).then() is not a function). Следующим, что я попробовал, были обратные вызовы. Я попробовал:

canvas.add(rect, function (err, canvas) {
  console.log("working")
})

вместе с

canvas.add(rect, function () {
  console.log("working")
})

но оба допустили ошибку:

C:\Users\me\Documents\my project\node_modules\fabric\dist\fabric.js:3696
            obj._set("canvas", this);
                ^

TypeError: obj._set is not a function
    at klass._onObjectAdded (C:\Users\me\Documents\my project\node_modules\fabric\dist\fabric.js:3696:17)
    at klass.add (C:\Users\me\Documents\my project\node_modules\fabric\dist\fabric.js:152:22)
    at Client.client.on.message (C:\Users\me\Documents\my project\index.js:41:10)
    at emitOne (events.js:115:13)
    at Client.emit (events.js:210:7)
    at MessageCreateHandler.handle (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
    at WebSocketPacketManager.handle (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
    at WebSocketConnection.onPacket (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:330:35)
    at WebSocketConnection.onMessage (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:293:17)
    at WebSocketClient.internalOnMessage (C:\Users\me\Documents\my project\node_modules\uws\uws.js:103:17)

Так что мне делать? Я делаю что-то не так с тем, как я использую обещания и / или обратные вызовы? Ткань просто не поддерживает их? Какой обходной путь для этого?

1 Ответ

0 голосов
/ 15 мая 2018

Согласно документации метод fabric.StaticCanvas.add не использует ни Promise, ни Callback.


enter image description here

...