如何在Javascript中使用承诺/链接与Azure移动服务自定义API

我想弄清楚如何使用AMS Javascript API的Promises。

这些是我创造的两个function,将是'承诺'

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.'}); } }); 

我试图使用承诺,因为我会在parsing,但显然不工作。 控制台日志不断吐出一个内部服务器错误,并且.then()不是该对象的函数。 我假设我错过了要求或某物为了有承诺function?

 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, eg: // 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; }