如何在JavaScript中将then函数的输出传递给外层函数?
解决异步函数返回值问题
你的核心问题是f2没有返回异步操作的Promise链,且异步结果无法同步获取,必须通过异步方式处理。
问题根源
f2函数内部调用了f1().then(...),但没有把这个Promise对象返回出去,所以f2执行后默认返回undefined。同时,异步操作的结果不会立即生成,无法通过同步赋值的方式直接拿到。
修改方案1:让f2返回Promise链
async function f1() { return 1; } function f2() { // 返回f1的Promise链,外部可通过then/await获取结果 return f1().then((f1_output) => { console.log(f1_output); // 控制台输出1 // 在这里添加对抓取数据的修改逻辑 const modifiedData = f1_output; // 替换为你的实际修改逻辑 return modifiedData; }) } // 通过then获取结果 f2().then(f2_output => { console.log(f2_output); // 输出修改后的数据 }); // 或在async函数中用await获取 async function run() { let f2_output = await f2(); console.log(f2_output); } run();
修改方案2:将f2改为async函数(可读性更高)
用await替代then,代码逻辑更直观:
async function f1() { return 1; } async function f2() { const f1_output = await f1(); // 等待f1的异步结果返回 console.log(f1_output); // 添加数据修改逻辑 const modifiedData = f1_output; return modifiedData; } // 调用方式 async function run() { let f2_output = await f2(); console.log(f2_output); // 输出修改后的数据 } run(); // 也可通过then调用 f2().then(f2_output => console.log(f2_output));
关键提示
- 只要涉及异步操作(比如爬虫抓取、网络请求),就无法同步获取结果,必须通过
Promise.then()或async/await处理。 - 你无法修改f1不影响逻辑,只要确保f2返回包含异步结果的Promise,外部就能正确拿到处理后的数据。
内容的提问来源于stack exchange,提问作者Mostafa Abasinejad
相关产品推荐
相关产品推荐

