javascript - Loopback API 和 Promise

标签 javascript node.js promise loopback

在环回文档中,它说 “以下内置模型支持 Promise API: 用户 应用 持久模型”

因此,如果在单元测试中,我想创建一个用户,然后登录该用户,那么如何使用回调方法工作:

aUser.create({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="126761776021527073603c717d7f" rel="noreferrer noopener nofollow">[email protected]</a>', password: 'foo'}, function() {
                aUser.login({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f386809681c0b3919281dd909c9e" rel="noreferrer noopener nofollow">[email protected]</a>', password: 'foo'}, 'user', function (err, res) {
                    // stuff
                });
            });

但使用 promise 不会:

var Promise = require ('bluebird');
aUser.create({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="30565f5f705251421e535f5d" rel="noreferrer noopener nofollow">[email protected]</a>', password: 'bar'})
                .then(function(err, res){
                    aUser.login({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7f1910103f1d1e0d511c1012" rel="noreferrer noopener nofollow">[email protected]</a>', password: 'bar'}, 'user');
                })
                .then(function(err, res) {
                    //stuff
                })
                .catch(function(err){
                    console.error(err);
                });

我还尝试过 Promise.join、Promise.mapSeries。

最佳答案

两个问题:

  1. 您的 promise 代码与非 promise 代码执行的操作不同。在你的非 promise 代码中,你不会做“事情”,直到 aUser.login成功完成,但在您的 promise 代码中您没有等待。做同样的事情,你的第一个then回调需要返回 aUser.login 的 promise 返回。否则, promise 您第一次调用then返回值被解析为 undefined ,而不是根据 aUser.login 的决议或拒绝来解决 promise 。

  2. 您为 then 声明的参数回调不正确:解析回调接收一个单个参数,即解析后的值。它不像 NodeJS 回调那样接收两个。

所以(请参阅标有 ​​*** 的行):

var Promise = require ('bluebird');
aUser.create({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ddbbb2b29dbfbcaff3beb2b0" rel="noreferrer noopener nofollow">[email protected]</a>', password: 'bar'})
    .then(function(res){                                                     // ***
        return aUser.login({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c2a23230c2e2d3e622f2321" rel="noreferrer noopener nofollow">[email protected]</a>', password: 'bar'}, 'user'); // ***
    })
    .then(function(res){                                                     // ***
        //stuff
    })
    .catch(function(err){
        console.error(err);
    });

旁注:如果您不使用Promise在您的代码中,无需要求它。

关于javascript - Loopback API 和 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585219/

相关文章:

javascript - Angular 类型错误: Cannot read property 'icon' of undefined

javascript - node.js 正则表达式分割字符串以发送到另一台服务器

node.js - 在 NPM 包内声明全局命令

javascript - 在进入下一行之前,await 函数不会执行。 (异步/等待不起作用)

javascript - highcharts 中的 TreeMap 仅在 TreeMap 中显示系列名称和值

javascript - addThis智能api层添加一个链接

node.js - Monk可以直接返回json数据而不是promise吗?

javascript - 如何在 Node.js 中检测多个数组的多个异步调用何时完成

php - 如何正确使用 JSON.stringify 和 json_decode()

javascript - 类型错误 : Cannot read property 'pipe' of undefined gulpjs