node怎么改变函数外变量

function findUrl(url, collection) {
            collection.find({
                url: url
            }).toArray(function (err, docs) {
                if (docs.length > 0) {
                    result = {
                        original_url: docs[0].url,
                        short_url: docs[0].shorterUrlNum
                    };
                    console.log(result); //<---从数据库中得出数据,改变了result的值
                }
            });
            console.log(result);//<---这里显示未赋值之前的,值没有改变
            return result;
        }

这里我猜应该是异步惹的祸,但是怎么能让result跟着被改变?

阅读 2.4k
2 个回答

就是异步惹的祸呢,传callback到findUrl里面吧,if里面取得result后callback(result),感觉node里面全是异步的处理,基本上都是callback呢。可以用async管理,至少代码可以清楚点。

这不是改变函数外变量的问题。

异步调用的话,第二个 console.log(result) 会在 function (err, docs) 之前执行。

你应该考虑,要么传入回调函数,要么返回一个 Promise,通过 Promise 的 done 事件来处理后续的事情。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题