Javascript 包装回调函数时作为函数返回的承诺

Javascript 包装回调函数时作为函数返回的承诺,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

我正在尝试将加密库中现有的基于回调的函数转换为es6
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]

要将承诺构造函数与执行器回调一起使用,它是
返回新承诺(…)
,而不是
返回新承诺。解析(…)

我正在尝试将加密库中现有的基于回调的函数转换为ES8
async/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]

要将承诺构造函数与执行器回调一起使用,它是
返回新承诺(…)
,而不是
返回新承诺。解析(…)

我正在尝试将加密库中现有的基于回调的函数转换为ES8
async/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值将是您的承诺函数。现在这看起来更吸引人,可以尝试一下,希望放弃整个函数。现在这看起来更吸引人,可以尝试一下,希望放弃整个函数。