javascript - 如何在 Javascript 中通过 Azure 移动服务自定义 API 使用 Promises/Chaining

标签 javascript node.js azure

我正在尝试弄清楚如何将 Promises 与 AMS Javascript API 一起使用。

这是我创建的两个将被“ promise ”的函数

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 Node 模块来实现我的 promise 。

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;
    
}

关于javascript - 如何在 Javascript 中通过 Azure 移动服务自定义 API 使用 Promises/Chaining,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546901/

相关文章:

azure - 在 Azure 逻辑应用程序中执行存储过程因网关超时而失败

javascript - 将挖空 View 模型拆分为多个文件

javascript - 从 React-redux-universal-hot-example 入门套件中的第 3 方 API 初始加载数据

javascript - 将任何起始字符实例替换为空字符串

azure - 我可以在 Azure Function 输出绑定(bind)中配置动态表名称吗?

c# - 是什么导致 Azure SDK 2.4 出现 "Role Instances are taking longer than expected"错误?

javascript - 使用javascript创建一个没有table标签的带有div的二维表格

javascript - 将函数包装为 jQuery 参数

node.js - 在 Angular (>= 2) 应用程序中,如何将 npm package.json 文件中的版本信息包含到编译的输出文件中?

ajax - 如何使 angular2 在成功的预检请求后正确触发正确的回调