2016-08-30 2 views
0

Ошибка gm дает ошибку gm().write() expects a callback function. Функция записи поступает от fs, поэтому я также обещал ее. Тем не менее это не работает.Невозможно выполнить bluebird.Promisifyall gm

var gm = bluebird.promisifyAll(require("gm")); 
var fs = bluebird.promisifyAll(require("fs")); 

gm(filePath).resize(null, 128).write(file) 
    .then(function() { 
     console.log("Done"); 
    }) 
    .catch(function(err) { 
     console.log(err); 
    }); 

Как использовать обещание с gm?

ответ

1

Обычная схема Bluebird для promisifying с promisifyAll() создает .writeAsync(), которая возвращает обещание. Он не меняет .write(). Это предполагает, что объект, возвращаемый gm(), является тем, с которым Bluebird может добраться до gm.prototype.

Таким образом, вы могли бы сделать это:

const gm = require("gm"); 
bluebird.promisifyAll(gm.prototype); 

gm(filePath).resize(null, 128).writeAsync(file).then(function() { 
    console.log("Done"); 
}).catch(function(err) { 
    console.log(err); 
}); 

Примечание: Вы не должны promisify в fs модуль, если вы не собираетесь использовать фс promisified методы непосредственно сами.

+0

Я пробовал ваше решение, но оно дает 'gm (...). Resize (...). WriteAsync не является ошибкой функции. –

+0

@SharadCodes - Тогда, возможно, 'gm()' несовместимо с ".promisifyAll()') Bluebird. Я не знаком с этой библиотекой, чтобы узнать, что она возвращает после 'gm(). Resize()'. По-видимому, какой бы ни был этот объект, он не получил обещания. – jfriend00

+0

Я пробовал 'var gm = require (" gm "); Promise.promisifyAll (gm.prototype); 'тогда это сработало. Почему это сработало, полностью передо мной. –

Смежные вопросы