如何在Javascript中使用Azure移动服务自定义API的承诺/链接
How to use Promises/Chaining with Azure Mobile Services Custom API in Javascript
我正在试图弄清楚如何将Promise与AMSJavascript API一起使用。
这是我创建的两个"承诺"功能
function checkUsername(username, table) {
return table.where({username: username}).read({
success: function (results) {
if (results.length === 0) {
return true;
} else {
return false;
}
},
error: function(error) {
return false;
}
});
}
function checkEmail(email, table) {
return table.where({email: email}).read({
success: function (results) {
if (results.length === 0) {
return true;
} else {
return false;
}
},
error: function(error) {
return false;
}
});
}
checkUsername(body.username, accountsTable).then(function (results) {
if (results) {
return checkEmail(body.email, accountsTable);
} else {
response.send(400, {message: 'This username is already in use.'});
}
}).then(function(results) {
if (results) {
response.send(200, {message: 'Can proceed with sign up.'});
} else {
response.send(400, {message: 'This email address is already in use.'});
}
});
我试图像在Parse中那样使用promise,但它显然不起作用。控制台日志不断抛出内部服务器错误,而.then()不是对象的函数。我假设我错过了一个需求或其他东西,以便拥有Promises功能?
Error in script '/api/register.js'. TypeError: Cannot call method 'done' of undefined
at exports.post (D:'home'site'wwwroot'App_Data'config'scripts'api'register.js:30:59)
[external code]
我已经意识到我做错了什么。
我现在决定使用Q节点模块来实现我的承诺。
var q = require('q');
exports.post = function(request, response) {
// Use "request.service" to access features of your mobile service, e.g.:
// var push = request.service.push;
var tables = request.service.tables;
var accountsTable = tables.getTable('Accounts');
var params = request.body;
checkUsername(params.username, accountsTable).then(function (result) {
if (result.length === 0) {
return checkEmail(params.email, accountsTable);
} else {
response.send(400, {message: 'This username is in use.'});
}
}).then(function (results) {
if (results.length === 0) {
return;
} else {
response.send(400, {message: 'This email address is already registered.'});
}
}).then(function () {
response.send(200, {message: 'Username and email are unique. You can register!'});
});
};
function checkUsername(username, table) {
var deferred = q.defer();
table.where({username: username}).read({
success: function (result) {
deferred.resolve(result);
},
error: function (error) {
deferred.reject(error);
}
});
return deferred.promise;
}
function checkEmail(email, table) {
var deferred = q.defer();
table.where({email: email}).read({
success: function (result) {
deferred.resolve(result);
},
error: function (error) {
deferred.reject(error);
}
});
return deferred.promise;
}
相关文章:
- 映射API自定义可拖动方向
- 全球API自定义标记图标
- 谷歌新闻 API 自定义搜索
- 使用 Google Places API 自定义 NearBuy Places
- 谷歌地图 API 自定义折线
- 是否可以使用 JavaScript 使用选择器 API 自定义保管箱
- 嵌入 API 自定义组件:未捕获类型错误:无法读取未定义的属性“ViewSelector2”
- Web 语音 API 自定义字词
- 使用Fotoraama api自定义缩略图和标题
- 嵌入youtube APi自定义按钮
- 使用YouTube API自定义进度条
- 通过HTML表单和API自定义图像过滤器
- 如何使用javascript api自定义Youtube上传小部件
- 谷歌地图API -自定义原型标记图像从今天开始不显示
- 跟踪API自定义元素与聚合物不工作
- Web动画API自定义效果实现
- 谷歌地图API自定义标记动画和方向沿着路径
- Google Maps Javascript API自定义控件下拉
- 谷歌地图API自定义图标与SSL
- 谷歌地图API自定义地图类型允许边界的最大调用堆栈大小超过/太多递归