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

函数内Promise未执行问题:testAuthentication与pinFileToIPFS无响应

问题原因及解决方案

核心问题:Node.js进程提前退出 + 未正确等待异步操作

你的代码里的Promise没执行,本质是两个关键原因:

  • 函数执行完毕后,Node.js检测不到任何待处理的异步任务,直接终止进程,导致Promise的.then/.catch回调还没来得及触发。
  • 就算改成async函数,你没通过await等待Promise完成,也没在调用函数时处理异步结果,进程依然会提前退出。

修复步骤

  1. 将函数改为async并使用await等待Promise
    用async/await替代.then/.catch语法,确保异步操作完成后再继续执行后续代码,同时让函数返回一个Promise,方便调用者等待整个流程结束。

  2. 调用函数时必须等待其完成
    在脚本顶层使用await(Node.js 14.8+支持),或者用.then()链式调用,保证进程不会在异步操作完成前退出。

修改后的代码示例

const pinataSDK = require('@pinata/sdk');
const fs = require('fs');

async function uploadToPinata(filename) {
    const pinata = pinataSDK(process.env.PINATA_KEY, process.env.PINATA_SECRET_KEY);
    try {
        // 等待认证测试完成
        const authResult = await pinata.testAuthentication();
        console.log('认证结果:', authResult);
        
        const readableStreamForFile = fs.createReadStream(filename);
        const options = {
            pinataMetadata: {
                name: "NYC_NFT_TESTING",
            },
            pinataOptions: {
                cidVersion: 0
            }
        };

        // 等待文件上传完成
        const pinResult = await pinata.pinFileToIPFS(readableStreamForFile, options);
        console.log('上传结果:', pinResult);
        return pinResult;
    } catch (err) {
        console.error('操作失败:', err);
        throw err; // 抛出错误让调用者处理,或根据需求自行处理
    }
}

// 调用示例(顶层await)
await uploadToPinata('./your-file.txt');

// 兼容旧版本Node.js的调用方式
// uploadToPinata('./your-file.txt')
//     .then(() => console.log('上传流程完成'))
//     .catch(err => console.error('上传流程失败', err));

额外说明

  • 如果代码是在Express等框架的路由中调用,需确保路由处理函数也是async,并正确处理错误。
  • 不要忽略错误处理:try/catch能捕获await的Promise抛出的错误,避免未捕获的Promise异常导致进程崩溃。

内容的提问来源于stack exchange,提问作者Jesse Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:10:36