Ошибка при использовании bluebird с ncp

Я использую следующий код, который работает нормально

var ncp =  require('ncp').ncp;

function load(folderPath) {
    ncp.limit = 16;
    var path = require('path');
    var localPath = path.join(__dirname, '../pl');
    ncp(folderPath, localPath, {dereference: false}, function (err) {
        if (err) {
            return console.error(err);
        }
        console.log('done to save the files!');
    });
};

Я хочу использовать promise вместо обратного вызова, но при использовании следующего я получил ошибку

var Promise = require('bluebird');
var ncp = Promise.promisifyAll(require('ncp').ncp);

function load(folderPath) {
    ncp.limit = 16;
    var localPath = path.join(__dirname, '../pl');
    ncp(folderPath, localPath, {dereference: false})
        .then(function (result) {
            console.log('done to save the files!');
        })
        .catch(function (err) {
            console.err(err);
        });
};

Ошибка :

TypeError: Cannot read property 'then' of undefined

1 ответ

  1. Promise.promisifyAll() используется для promisify объектов . Он будет повторять объект и обещать все свойства функции на этом объекте.

    Однако, ncpэто сама функция, она не имеет свойств, поэтому promisifyAll()не будет делать. Вы ищетеpromisify(), который принимает функцию в качестве аргумента и возвращает обещанную функцию.

    Так что все, что вам нужно сделать, это изменить

    var ncp = Promise.promisifyAll(require('ncp').ncp);
    

    к

    var ncp = Promise.promisify(require('ncp').ncp);