gpt4 book ai didi

javascript - 如何使解析查找/保存操作同步?

转载 作者:数据小太阳 更新时间:2023-10-29 05:11:47 25 4
gpt4 key购买 nike

我们正在用 nodejs 编写服务器代码并使用 Parse javascript sdk。我们经常需要获取或更新各种 Parse 对象。例如,获取用户名为“Example”的用户。

  function fetchUser(username)
{
var User = Parse.Object.extend("User");
var query = new Parse.Query("User");
query.equalTo("username",username);

query.first({
success: function(results) {
console.log("Successfully retrieved " + results.length + " scores.");
return results;
},
error: function(error) {
console.log("Error: " + error.code + " " + error.message);
}
});
}

这个函数可能会被其他函数调用:

function test()
{
var user = fetchUser("example");
console.log(user); // would often print undefined
return user;
}

function top()
{
// some code
var user = test();
//some code
}

// and the function top() mmight be called by some other functions

问题是我会得到未定义的结果,因为 find/first 操作异步运行。有没有办法确保 fetchUser() 函数仅在查找/第一个操作成功/完成时返回?

最佳答案

JavaScript 本质上是异步的。您必须将回调传递给 fetchUser() 函数并将您的客户端代码重写为如下内容:

function fetchUser(username, callback) {
// do request and call callback(null, user) on success
// or callback(some_error_object) on failure.
}

function test(callback) {
var onFetched = function(err, user) {
console.log(user);
callback(err, user);
}
var user = fetchUser("example", onFetched);
}

您也可以使用 promisesgenerators (自 EcmaScript 6 起)方法。

UPD:虽然一些 API(数据库驱动程序、fs 等)允许以同步方式使用它们,但人们认为用 JavaScript 编写代码是一种糟糕的方式。由于 JS 在单线程中运行您的代码,使用同步调用阻塞此线程将阻塞所有其他任务。因此,如果您开发一个同时处理几个客户端的 Web 服务器,并决定对某些 API 使用同步调用,则一次只会为一个客户端提供服务,而其他客户端将处于挂起状态。

关于javascript - 如何使解析查找/保存操作同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40381294/

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