React/Javascript-函数在完成执行之前返回

React/Javascript-函数在完成执行之前返回,javascript,reactjs,Javascript,Reactjs,我已经创建了一个函数,它接受一个对象并通过解析来构建搜索查询。我遇到的问题是,该函数在我遍历对象之前返回: export default function buildQuery(query) { let buildQuery = "?", pushAmpersand; Object.keys(query).map((v, i) => { i === 0 ? pushAmpersand = "" : pushAmpersand = "&";

我已经创建了一个函数,它接受一个对象并通过解析来构建搜索查询。我遇到的问题是,该函数在我遍历对象之前返回:

export default function buildQuery(query) {

    let buildQuery = "?", pushAmpersand;
    Object.keys(query).map((v, i) => {
        i === 0 ? pushAmpersand = "" : pushAmpersand = "&";
        buildQuery += pushAmpersand + v + "=" + query[v];
    });

    console.log('Finished executing?');
    console.log(buildQuery);
    return buildQuery;
}
返回值为“-”-因为在开始时设置了字符串。为什么它不等到我在物体上绕了一圈

我想这是因为它是一个“异步”函数,所以这是我应该引入承诺或回调的地方吗?这是我第一次遇到这样的问题


谢谢您的回答。

您可以使用


你用错了。它不是普通环路的替代品<代码>映射应将值返回到新数组中。请尝试使用
forEach
。根据许多其他答案(例如:),这是一种在React中循环对象以检索键值对的有效方法。这与我的函数在完成之前返回的原因无关。我要告诉你们的是,你们错误地使用了map。请看您提供的链接中的示例<代码>映射正在返回一个值以创建新数组。你至少试过forEach?@Andy它应该仍然会生成buildQuery,因为
buildQuery+=pushAmpersand+v+“=”+query[v]
每次都会在回调函数中执行。啊,该死,很抱歉,伙计们,谢谢Djj,你的评论让我意识到我传递的是一个空对象。我正在传递一个刚设置state的对象,在我将this.state.query作为参数发送到函数调用之前,状态似乎还没有更新。同样感谢你的评论,安迪,我会更深入地研究map和forEach之间的区别,因为是的,我可能用错了。谢谢你的评论。
export default function buildQuery(query) {    
    let buildQuery = "?";
    Object.keys(query).forEach((v, i) => {
        if( i !== 0 ) buildQuery += "&";
        buildQuery += (v + "=" + query[v]);
    });    
    console.log('Finished executing?');
    console.log(buildQuery);
    return buildQuery;
}