JavaScript Promises
JavaScript Promises
本文关键字:Promises JavaScript 更新时间:2023-09-26
我试图理解承诺,但我遇到了障碍,我正在尝试查询我的 Parse 数据库以获取上次运行的日期对象,以便不知道它上次运行的时间。然后将该日期传递给下一个函数,该函数可以在上次调用电影后检查我的电影数据库以获取任何内容。(我这样做是为了为手动输入到 Parse 类中的新字段发送推送通知(然后实际发送推送。但我不明白 .then 和承诺,我是 JavaScript 的新手,所以任何帮助将不胜感激!
这是我现在拥有的代码。
Parse.Cloud.job("TestSendNewMoviePush", function(request, response) {
var query = new Parse.Query("MovieStatus");
var lastRunDateQuery = new Parse.Query("LastRun");
var lastRunDate;
var newDate;
var newCount = 0;
var installQuery = new Parse.Query(Parse.Installation);
query.greaterThan("updatedAt", lastRunDate);
query.equalTo("CurrentStatus", "Ready");
query.equalTo("imageStatusName", "Green");
installQuery.equalTo("role", "downloader");
lastRunDateQuery.get("d3WeNEwzIu", {
success: function(lastDateRanObj) {
console.log("Got the object " + lastDateRanObj);
var date = new lastDateRanObj.updatedAt;
lastRunDate = lastDateRanObj.updatedAt;
console.log(lastRunDate);
return lastRunDate;
},
error: function(lastDateRanObj, error) {
console.log("Failed to get object");
}
}).then(
query.count({
success: function(count) {
newCount = count;
return newCount
},
error: function(e) {
}
})).then(
Parse.Push.send({
where: installQuery,
data: {
"alert": newCount + " new movie(s) available!",
"badge": "Increment"
}
}, {
success: function() {
response.success("Success");
},
error: function(e) {
response.error("Error:" + e.code);
}
}));
});
lastRunDateQuery.get()
返回一个 Promise 对象,您可以将其与 then
链接,该对象本身是一个将 2 个函数作为参数的函数:一个在解决承诺时调用,另一个在承诺被拒绝时调用。您可以使用这些参数而不是成功和错误参数:
lastRunDateQuery.get()
.then(function(data) {
// success!!
}, function(error) {
// error :(
});
作为参数传递给then
的函数本身可以返回 promise,随后您可以使用 then
链接这些 .在下面的示例中,我省略了错误回调:
lastRunDateQuery.get()
.then(function(data) {
// data is the result of lastRunDateQuery.get()
return query.count();
})
.then(function(data) {
// data is the result of query.count()
return someOtherThing.someOtherMethodReturningAPromise();
});
.then(function(data) {
// data is the result of someOtherThing.someOtherMethodReturningAPromise()
});
等等。
我建议看看承诺/A +规范 - 它非常有启发性。
编辑:
如果链接概念有点令人困惑,只需将其视为以下内容的简写:
var aPromise = lastRunDateQuery.get();
aPromise.then(
function() {}, // promise was resolved -> call this function
function() {}, // promise was rejected -> call this function
);
相关文章:
- 为什么javascript ES6 Promises在解析后继续执行
- 解析javascript对象中的Promises
- JavaScript Promises and setTimeout
- JavaScript中的异步函数递归和Bluebird Promises
- Javascript/Parse.com - Promises, Calling response.success()
- JavaScript:用Promises调用递归函数
- 使用Promises加载带有JavaScript的jQuery
- 如何在解决所有javascript ES6 Promises后运行
- Javascript Promises with FileReader()
- Javascript, Node, Promises, and recursion
- 在JavaScript中使用Memoization和Promises+Deferrends缓存从AJAX加载到本地变量的
- 在没有线程的情况下,如何在Javascript中实现Promises ?
- JavaScript Promises
- Javascript Promises (Q)不会等待下一个问题被解决
- 如何使用Jasmine.js对Javascript Promises进行单元测试?
- 当JavaScript是单线程的时候,Promises是如何工作的?
- done()和Javascript promises中的catch()一样(使用sequelize和bluebird)吗
- Javascript BlueBird Promises:并发API请求的架构
- Foreach with promises javascript
- Pokemon API, Promises javascript在数组json中获取数据