使用蓝鸟与ncp时出错

时间:2016-05-24 06:06:12

标签: javascript promise bluebird

我使用以下代码正常工作

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 个答案:

答案 0 :(得分:0)

Promise.promisifyAll()用于宣传对象。它将迭代对象并宣传该对象上的所有函数属性。

但是,ncp本身就是一个功能,它没有属性,所以promisifyAll()不会这样做。您正在寻找以函数作为参数的promisify(),并返回一个promisified函数。

所以你需要做的就是改变

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

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