Fated_123 2024-07-05 15:27 采纳率: 13.3%
浏览 13

promise函数调用问题

在使用JavaScript时,我需要同步获取readText(a)函数的返回值并赋值给新的变量,但是使用promise后,返回的是promise,如下图,无法直接返回我需要的值( "磨削加工数据编号"),

img


请问怎么处理?

function readText(a) {
    return new Promise((resolve, reject) => {
        $.get('../Config/Work_information.json', function (data) {
            var name = Object.keys(data);
            for (var i = 0; i < name.length; i++) {
                console.log(typeof (name[i]), typeof (a));
                if (a === name[i]) {
                    resolve(data[name[i]]);  // 这里返回数据给Promise
                    return;  // 结束该函数执行,不再继续循环剩余部分
                }
            }
            reject("未找到匹配项");  // 如果未找到匹配项,则拒绝Promise并返回错误信息
        });
    });
};

$.get('testtable.json', function (data) {

    var name = Object.keys(data[0]);

    for (var i = 0; i < name.length; i++) {

        const Kname = readText(name[i]);
       
    }
})

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-07-05 15:29
    关注

    引自免费微信小程序:皆我百晓生

    在你的代码中,你正在尝试同步地获取 readText(a) 函数的返回值并赋值给新的变量,但由于 readText 函数返回一个 Promise,你需要使用异步的方式来处理这个 Promise 的结果。你不能直接在同步代码中使用 readText(name[i]) 来获取返回值,因为这会导致代码在等待 Promise 完成时阻塞。你需要使用 .then() 方法或者 async/await 语法来处理异步操作。

    以下是使用 async/await 的修改后的代码示例:

    $.get('testtable.json', async function (data) {
        var name = Object.keys(data[0]);
    
        for (var i = 0; i < name.length; i++) {
            try {
                const Kname = await readText(name[i]);  // 使用 await 等待 Promise 完成
                // 在这里处理 Kname 的值
                console.log(Kname);
            } catch (error) {
                console.error("未找到匹配项或发生错误:", error);  // 如果出现错误,捕获并处理
            }
        }
    });
    

    注意:await 关键字只能在 async 函数内部使用。因此,你需要在获取 'testtable.json' 的回调函数中创建一个异步函数来处理 readText 的调用。如果在 readText 函数中发生错误(例如文件不存在或网络请求失败),它会进入 catch 块并打印错误信息。如果成功获取数据,你可以在 try 块内部处理返回的值 Kname

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月5日