Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t将lodash部分应用于使用bluebird promisifyAll创建的函数_Javascript_Function_Lodash_Bluebird - Fatal编程技术网

Javascript Can';t将lodash部分应用于使用bluebird promisifyAll创建的函数

Javascript Can';t将lodash部分应用于使用bluebird promisifyAll创建的函数,javascript,function,lodash,bluebird,Javascript,Function,Lodash,Bluebird,下面的代码对objectlib中的所有方法进行了分析,并对它们进行了说明。然后我可以使用回调风格的函数作为承诺,这是有效的。然后我使用。

下面的代码对object
lib
中的所有方法进行了分析,并对它们进行了说明。然后我可以使用回调风格的函数作为承诺,这是有效的。然后我使用
提供函数和参数,这将返回一个函数。当我调用该函数时,它会抛出一个错误,而不是包装函数。我有一大堆测试表明,这种行为只发生在使用
promisifyAll
生成的函数上。这里有什么问题?如何解决

var Promise = require("bluebird")
var _ = require("lodash")

var lib = {}

lib.dummy = function(path, encoding, cb){
  return cb(null, "file content here")
}

Promise.promisifyAll(lib)

lib.dummyAsync("path/hello.txt", "utf8").then(function(text){
  console.log(text) // => "file content here"
})

var readFile = _.partial(lib.dummyAsync, "path/hello.txt", "utf8")

readFile() // throws error
它在投掷

Unhandled rejection TypeError: Cannot read property 'apply' of undefined
    at tryCatcher (/Users/thomas/Desktop/project/node_modules/bluebird/js/main/util.js:26:22)
    at ret (eval at <anonymous> (/Users/thomas/Desktop/project/node_modules/bluebird/js/main/promisify.js:163:12), <anonymous>:11:39)
    at wrapper (/Users/thomas/Desktop/project/node_modules/lodash/index.js:3592:19)
    at Object.<anonymous> (/Users/thomas/Desktop/project/issue.js:18:1)
    at Module._compile (module.js:426:26)
    at Object.Module._extensions..js (module.js:444:10)
    at Module.load (module.js:351:32)
    at Function.Module._load (module.js:306:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:117:18)
    at node.js:946:3

promisifyAll
确实创建了希望在原始实例上调用的方法(因为它调用了原始的
.dummy
方法),但是
partial
没有绑定您传入的函数,因此您得到了一个
错误。您可以使用
readFile.call(lib)
.partial(lib.dummyAsync.bind(lib),…)
或只使用
lib.dummyAsync.bind(lib,…)
promisifyAll
创建期望在原始实例上调用的方法(因为它调用了原始的
.dummy
方法),但是
partial
不会绑定传入的函数,因此您将得到
错误。您可以使用
readFile.call(lib)
.partial(lib.dummySync.bind(lib),…)
或只使用
lib.dummySync.bind(lib,…)

复制答案:

问题是
部分
没有维护
值,这是当您
promisifyAll
时所需的值。您可以使用
promisify
代替,也可以使用
\uu.bind
这是适当的lodash方法

var o = {};
o.dummy = function(path, encoding, cb){
  return cb(null, "file content here " + path + " " +encoding);
}

Promise.promisifyAll(o);

o.dummyAsync("a","b").then(function(data){
   console.log("HI", data); 
});

// and not `_.partial`
var part = _.bind(o.dummyAsync, o, "a1", "b2");
part().then(function(data){
   console.log("Hi2", data); 
});
复制答案:

问题是
部分
没有维护
值,这是当您
promisifyAll
时所需的值。您可以使用
promisify
代替,也可以使用
\uu.bind
这是适当的lodash方法

var o = {};
o.dummy = function(path, encoding, cb){
  return cb(null, "file content here " + path + " " +encoding);
}

Promise.promisifyAll(o);

o.dummyAsync("a","b").then(function(data){
   console.log("HI", data); 
});

// and not `_.partial`
var part = _.bind(o.dummyAsync, o, "a1", "b2");
part().then(function(data){
   console.log("Hi2", data); 
});

知道为什么不能将绑定函数传递到中吗?你知道为什么我不能把一个绑定函数传递给它吗?