首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >回送API和承诺

回送API和承诺
EN

Stack Overflow用户
提问于 2016-07-26 08:52:03
回答 1查看 1.7K关注 0票数 2

在回环文档中,它说:“以下内置模型支持承诺API:用户应用程序PersistedModel”

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

代码语言:javascript
运行
复制
aUser.create({email: 'user3@bar.com', password: 'foo'}, function() {
                aUser.login({email: 'user3@bar.com', password: 'foo'}, 'user', function (err, res) {
                    // stuff
                });
            });

但使用承诺并不是:

代码语言:javascript
运行
复制
var Promise = require ('bluebird');
aUser.create({email: 'foo@bar.com', password: 'bar'})
                .then(function(err, res){
                    aUser.login({email: 'foo@bar.com', password: 'bar'}, 'user');
                })
                .then(function(err, res) {
                    //stuff
                })
                .catch(function(err){
                    console.error(err);
                });

我还试过Promise.join,Promise.mapSeries。

EN

Stack Overflow用户

回答已采纳

发布于 2016-07-26 08:57:04

两个问题:

  1. 您的承诺代码与您的非承诺代码所做的不一样。在您的非承诺代码中,在aUser.login成功完成之前,您不会做“事情”,但是在您的承诺代码中,您不会等待它。要做同样的事情,您的第一个then回调需要返回-- aUser.login返回的承诺。否则,您第一次调用then返回的承诺将使用值undefined来解析,而不是基于aUser.login承诺的解析或拒绝进行解决。
  2. 您为then回调声明的参数是不正确的:解析回调接收一个单个参数,这是已解析的值。这不像一个接收两个的NodeJS回调。

因此(请参阅使用***标记的行):

代码语言:javascript
运行
复制
var Promise = require ('bluebird');
aUser.create({email: 'foo@bar.com', password: 'bar'})
    .then(function(res){                                                     // ***
        return aUser.login({email: 'foo@bar.com', password: 'bar'}, 'user'); // ***
    })
    .then(function(res){                                                     // ***
        //stuff
    })
    .catch(function(err){
        console.error(err);
    });

附带注意:如果您在代码中没有使用Promise,则无需使用它。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38585219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档