生成哈希值供API调用遇Promise参数错误:期望1参却传0
你的错误直接原因是HashPBKDF2value函数定义时声明了需要一个getGenValue参数,但你调用await HashPBKDF2value();的时候没有传任何参数,所以会报参数不匹配的错误。不过更关键的是,你当前的Promise写法完全没有和MosquittoPBKDF.createPasswordAsync的异步逻辑关联起来,这才是导致哈希值始终为undefined的核心问题。
我们来一步步修正你的代码:
第一步:正确封装异步操作为Promise
MosquittoPBKDF.createPasswordAsync看起来是一个基于回调的异步函数,我们需要把它包装成Promise,这样才能用await等待它完成。假设它的回调格式是(error, hashedResult) => {}(这是常见的异步回调约定),我们可以这样封装:
async HashValue(){ // 1. 生成原始密码值 const generateValue = PasswordGenerator.generate({length: 25}); // 2. 封装createPasswordAsync为Promise,关联真实的哈希逻辑 const hashPassword = (plainValue) => { return new Promise((resolve, reject) => { // 调用异步哈希函数,把回调结果绑定到Promise的resolve/reject MosquittoPBKDF.createPasswordAsync(plainValue, (error, hashedResult) => { if (error) { reject(error); // 哈希失败时抛出错误 } else { resolve(hashedResult); // 哈希成功时返回结果 } }); }); }; // 3. 等待哈希操作完成 try { const hashedValue = await hashPassword(generateValue); console.log("Hashed Value", hashedValue); await this.storage.set("ValueHashed", hashedValue); // 4. 哈希值有效时调用API if (hashedValue) { this.RunAPI(); } } catch (error) { // 处理哈希过程中的异常 console.error("Failed to hash password:", error); } } RunAPI() { // 优化:可以直接接收hashedValue作为参数,减少一次storage读取 // 或者保持原逻辑,读取存储值时增加错误处理 this.storage.get("ValueHashed").then(hashedValue => { // 执行API调用,使用hashedValue console.log("Using hashed value for API:", hashedValue); }).catch(error => { console.error("Failed to retrieve hashed value:", error); }); }
关键改动说明:
- 修复参数错误:现在
hashPassword函数接收的plainValue就是我们生成的generateValue,调用时正确传递参数,不会再报参数不匹配的错误。 - 关联真实异步逻辑:把
MosquittoPBKDF.createPasswordAsync的回调结果绑定到Promise的resolve和reject上,await才能真正等待哈希操作完成,拿到正确的哈希值。 - 增加错误处理:用
try/catch包裹异步操作,避免哈希失败时整个函数崩溃;RunAPI里也增加了存储读取的错误处理。 - 解决undefined问题:原来的Promise没有传递任何实际值,现在通过
resolve(hashedResult)把真实的哈希结果返回,能确保hashedValue不为undefined(只要哈希成功)。
为什么原来的写法不行?
你原来的HashPBKDF2value函数虽然返回了Promise,但里面的resolve()没有传递任何值,而且完全没有和MosquittoPBKDF.createPasswordAsync的执行结果关联起来,所以await之后拿到的hashedValue必然是undefined,这也是你之前API调用拿到undefined的根本原因。
内容的提问来源于stack exchange,提问作者user1741397
相关产品推荐
相关产品推荐

