gpt4 book ai didi

javascript - 从 for 循环返回数据

转载 作者:行者123 更新时间:2023-12-03 02:11:30 25 4
gpt4 key购买 nike

当您运行此函数时,我正在使用 socket.io 来获取有关用户使用其 uid 的数据

function getUserData(uid){
"use strict"
socket.emit('getUserData',uid, function(callback){
console.log('callback' + callback)
for (var i = 0; i < callback.length; i++) {
var row = callback[i];
var username = row.username;
var about = row.about;
var uid = row.uid;
}
})
return {
username: username,
uid: uid,
// about: about
};
}

它在服务器端执行此操作

socket.on('getUserData',function(uid, callback){
connection.query('SELECT * FROM users WHERE uid = ?', [uid], function(err, rows) {
callback(rows)
})
})

但是当我执行 console.log(getUserData(uid)) 时,我得到了未定义,但我确实从第一个回调中获取了对象,我在这里做错了什么?

最佳答案

来自 .emit() 的回调是异步的。这意味着它会在稍后的某个时间发生,即在您的 getUserData() 函数返回很久之后。这意味着您必须使用回调或 promise 来传达结果。此外,尝试迭代一个数组并返回一个结果是没有意义的。您应该返回所有结果或从数组中选择一项特定项目作为最终值。这会解析整个数据数组,让调用者决定他们想要从数组中选择哪一个。

以下是您如何通过 promise 做到这一点:

function getUserData(uid){
"use strict"
return new Promise(resolve => {
socket.emit('getUserData',uid, function(returnData){
console.log('returnData', returnData)
resolve(returnData);
});
});
}

// usage
getUserData(someUID).then(results => {
// use results in here
});

关于javascript - 从 for 循环返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49546088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com