Javascript 包装回调函数时作为函数返回的承诺
我正在尝试将加密库中现有的基于回调的函数转换为es6Javascript 包装回调函数时作为函数返回的承诺,javascript,ecmascript-6,promise,es6-promise,Javascript,Ecmascript 6,Promise,Es6 Promise,我正在尝试将加密库中现有的基于回调的函数转换为es6async/await中的方法。每当我调用generateSubkey(password,salt)时,它就会返回[函数]。在这里面,如果我调用toString(),它会显示我的方法代码,而不是执行它 import crypto from 'crypto'; import Promise from 'bluebird'; async hashPassword(password) { try { // Create a
async/await
中的方法。每当我调用generateSubkey(password,salt)
时,它就会返回[函数]
。在这里面,如果我调用toString()
,它会显示我的方法代码,而不是执行它
import crypto from 'crypto';
import Promise from 'bluebird';
async hashPassword(password) {
try {
// Create a salt with cryptographically secure method.
let salt = await crypto.randomBytes(16);
let subkey = await this.generateSubkey(password, salt);
console.log(subkey);
} catch (e) {
}
}
generateSubkey(password, salt) {
return new Promise.resolve((resolve, reject) => {
return crypto.pbkdf2(password, salt, 10000, 32, 'sha256', (err, buffer) => {
if (err) {
reject();
}
resolve(buffer);
});
})
}
您正在通过调用
promise.resolve
立即解析新创建的承诺。通过以下方式创建承诺:
返回新承诺((解析,拒绝)=>{…})代码>
顺便说一句,你也可以使用蓝鸟的promisify
(未经测试):
在较新的节点中,还提供promisify支持(不含bluebird):
您正在通过调用promise.resolve来解析新创建的promise。通过以下方式创建承诺:
返回新承诺((解析,拒绝)=>{…})代码>
顺便说一句,你也可以使用蓝鸟的promisify
(未经测试):
在较新的节点中,还提供promisify支持(不含bluebird):
每当我调用generateSubkey(password,salt)时,它都返回[function]
要将承诺构造函数与执行器回调一起使用,它是返回新承诺(…)
,而不是返回新承诺。解析(…)
我正在尝试将加密库中现有的基于回调的函数转换为ES8async/await
你可能在找。无需引入Bluebird 1并使用new Promise
构造函数
import crypto from 'crypto';
import util from 'util';
const pbkdf2Async = util.promisify(crypto.pbkdf2);
function generateSubkey(password, salt) {
return pbkdf2Async(password, salt, 10000, 32, 'sha256');
}
1:如果你还想用蓝鸟,它也会带来:-)
每当我调用generateSubkey(password,salt)时,它都返回[function]
要将承诺构造函数与执行器回调一起使用,它是返回新承诺(…)
,而不是返回新承诺。解析(…)
我正在尝试将加密库中现有的基于回调的函数转换为ES8async/await
你可能在找。无需引入Bluebird 1并使用new Promise
构造函数
import crypto from 'crypto';
import util from 'util';
const pbkdf2Async = util.promisify(crypto.pbkdf2);
function generateSubkey(password, salt) {
return pbkdf2Async(password, salt, 10000, 32, 'sha256');
}
1:如果您仍然想使用Bluebird,它也会带来:-)您正在返回新承诺。resolve()
它会立即解决承诺。resolve值将是您想要的Promise-function。您将返回新的Promise.resolve()
,它将立即解析承诺。resolve值将是您的承诺函数。现在这看起来更吸引人,可以尝试一下,希望放弃整个函数。现在这看起来更吸引人,可以尝试一下,希望放弃整个函数。