环回 API 和承诺
Loopback APIs and promises
在环回文档中,它说
“以下内置模型支持承诺 API:
用户
应用
PersistedModel
所以如果在单元测试中,我想创建一个用户,然后让该用户登录,那么使用回调方法如何工作:
aUser.create({email: 'user3@bar.com', password: 'foo'}, function() {
aUser.login({email: 'user3@bar.com', password: 'foo'}, 'user', function (err, res) {
// stuff
});
});
但使用 promise 不会:
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。
两个问题:
您的 promises 代码与您的 non-promises 代码做的事情不同。在您的非承诺代码中,您不会执行 "stuff" 直到 aUser.login
成功完成,但在您的承诺代码中您不会等待它。为了做同样的事情,您的第一个 then
回调需要 return aUser.login
return 的承诺。否则,您第一次调用 then
returns 的承诺将使用值 undefined
解决,而不是根据 aUser.login
承诺的解决或拒绝来解决。
您为 then
回调声明的参数不正确:解析回调接收一个 单个 参数,这是已解析的值.它不像接收两个的 NodeJS 回调。
所以(见标记为 ***
的行):
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
,则无需要求它。
在环回文档中,它说 “以下内置模型支持承诺 API: 用户 应用 PersistedModel
所以如果在单元测试中,我想创建一个用户,然后让该用户登录,那么使用回调方法如何工作:
aUser.create({email: 'user3@bar.com', password: 'foo'}, function() {
aUser.login({email: 'user3@bar.com', password: 'foo'}, 'user', function (err, res) {
// stuff
});
});
但使用 promise 不会:
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。
两个问题:
您的 promises 代码与您的 non-promises 代码做的事情不同。在您的非承诺代码中,您不会执行 "stuff" 直到
aUser.login
成功完成,但在您的承诺代码中您不会等待它。为了做同样的事情,您的第一个then
回调需要 returnaUser.login
return 的承诺。否则,您第一次调用then
returns 的承诺将使用值undefined
解决,而不是根据aUser.login
承诺的解决或拒绝来解决。您为
then
回调声明的参数不正确:解析回调接收一个 单个 参数,这是已解析的值.它不像接收两个的 NodeJS 回调。
所以(见标记为 ***
的行):
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
,则无需要求它。