将 bluebird 与 ncp 一起使用时出错

Error while using bluebird with 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

Promise.promisifyAll() 用于承诺 objects。它将迭代对象并承诺该对象的所有函数属性。

但是ncp本身就是一个函数,它没有属性,所以promisifyAll()不行。您正在寻找将函数作为参数的 promisify(),以及 returns 一个 promisified 函数。

所以你需要做的就是改变

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

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