Javascript 如何使用承诺异步调用此函数
我正在尝试创建一个parse.com函数,该函数检查数据库中的记录,并创建一个新的记录,或者返回现有的记录(如果存在)。我想异步地做这件事,我正在尝试使用承诺(我想是q)。语法让我有点困惑,这是我尝试过的,但它带来了错误“无法调用未定义的方法'then'”,我如何将其作为一个正确的承诺来写呢Javascript 如何使用承诺异步调用此函数,javascript,asynchronous,parse-platform,promise,q,Javascript,Asynchronous,Parse Platform,Promise,Q,我正在尝试创建一个parse.com函数,该函数检查数据库中的记录,并创建一个新的记录,或者返回现有的记录(如果存在)。我想异步地做这件事,我正在尝试使用承诺(我想是q)。语法让我有点困惑,这是我尝试过的,但它带来了错误“无法调用未定义的方法'then'”,我如何将其作为一个正确的承诺来写呢 function createPersonIfDoesNotExist(personName) { var Person = Parse.Object.extend("Person");
function createPersonIfDoesNotExist(personName)
{
var Person = Parse.Object.extend("Person");
var personQuery = new Parse.Query(Person);
personQuery.equalTo("Name", personName);
personQuery.find({
success: function(results) {
console.log("Successfully retrieved " + results.length + " person.");
if(results.length >0){
console.log("Looks like this person exists already, no point it making a new one");
var artist = results[0];
return artist;
}
else
{
// Create a new Person
var person = new Person();
return person;
}
},
error: function(error) {
console.log("Error: " + error.code + " " + error.message);
return error;
}
});
}
var promise = createPersonIfDoesNotExist(personname);
promise.then(console.log, console.error);
操作代码不返回任何内容。它应该返回由parse find()或save()方法生成的承诺 如果您编写的小函数能够在解析承诺返回函数的基础上创建小的、增值的承诺,那么阅读和维护就会变得更容易
// return a promise that is fulfilled with a new Person with the given name
function createPersonNamed(personName) {
var Person = Parse.Object.extend("Person");
var person = new Person();
person.set("Name", personName);
return person.save();
}
// return a promise that is fulfilled with the first existing person with a given name
function findPersonNamed(personName) {
var Person = Parse.Object.extend("Person");
var personQuery = new Parse.Query(Person);
personQuery.equalTo("Name", personName);
return personQuery.first();
}
// return a promise that is fulfilled with either an existing person with a given name,
// or a newly created one if the Person does not exist
function findOrCreatePersonNamed(personName) {
return findPersonNamed(personName).then(function(person) {
return (person)? person : createPersonNamed(personName);
});
}
似乎有两个问题-您的函数被调用为
createPersonifDeesnotexist
,但您正在调用createArtistIfDoesNotExist
。此外,函数不会返回任何内容。如果personQuery.find()
是创建承诺的函数,则需要返回该函数。没有理由使用Q,Parse已经附带了自己的承诺实现。不要使用success
和error
参数。