You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从已完成状态的Promise对象中提取返回的字符串值?

如何从Promise结果中获取对应字符串值

我的代码片段:

static base64URLEncode(t) {
    return t.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
}
function buf2Base64(buffer) {
    return (pks.constructor.base64URLEncode(pks.fromByteArray(new Uint8Array(buffer))));
}
async function test2(inputString) {    
    inputBytes = pks.constructor.textEncodeLite(inputString);
    hashBytes = await window.crypto.subtle.digest("SHA-256", inputBytes);    
    bufbase = buf2Base64(hashBytes);    
    return bufbase;
}

控制台输出的Promise状态:

Promise { <state>: "fulfilled", <value>: "xPCEgWjxihl6bIHJfpjrebwZzg0cn83ZokhVEwRVG2w" }

<state>: "fulfilled"

<value>: "xPCEgWjxihl6bIHJfpjrebwZzg0cn83ZokhVEwRVG2w"

<prototype>: Promise.prototype { … }

我试了JSON.stringify(test2(pks.generateCodeVerifier()));,结果返回"{}",请问该怎么正确取出<value>对应的字符串?


解决办法:

直接调用test2()得到的是Promise对象,不是最终的返回值,所以JSON.stringify处理的是Promise实例,自然输出空对象"{}"。要拿到Promise内部的已兑现值,有两种常用方式:

方式1:用async/await(代码更简洁,推荐)

因为test2本身是async函数,你可以在另一个async函数里用await获取结果:

async function getFinalValue() {
    const targetString = await test2(pks.generateCodeVerifier());
    console.log(targetString); // 这里就是你要的字符串
    // 如果需要转成JSON字符串
    console.log(JSON.stringify(targetString));
}
getFinalValue();

方式2:用Promise的.then()回调

如果没法用async函数,就用Promise的回调方法:

test2(pks.generateCodeVerifier()).then(targetString => {
    console.log(targetString); // 目标字符串
    console.log(JSON.stringify(targetString));
});

为什么之前的方法不行?

async函数的返回值本质是一个Promise对象,只有当Promise状态变为fulfilled后,才能通过await或者.then()拿到内部的兑现值。直接对Promise对象做JSON.stringify,会因为Promise的内部属性不可枚举,最终输出空对象{}。


内容的提问来源于stack exchange,提问作者Oswald Jenna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:38:36