【发布时间】:2016-11-02 21:56:48
【问题描述】:
我们正在用 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() 函数仅在 find/first 操作成功/完成时返回?
【问题讨论】:
-
为什么不直接提供一个回调给 fetchUser 并进行测试呢?如果您想拥有更好的可读性代码,请使用 Promise 而不是回调。
-
你不能让异步操作同步。无法在 Javascript 中完成。别再尝试了。了解如何使用回调或 Promise 进行异步编程,或切换到 Java 之类的阻塞/线程环境,让您可以在线程中以阻塞/同步的方式执行此类操作(以及该架构的相关妥协)。
-
JavaScript 的新手。有时,简单的“不可能”也是一个足够好的回应。谢谢。 :)
标签: javascript node.js parse-platform promise parse-javascript-sdk