在环回文档中,它说 “以下内置模型支持 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。
最佳答案
两个问题:
您的 promise 代码与非 promise 代码执行的操作不同。在你的非 promise 代码中,你不会做“事情”,直到
aUser.login
成功完成,但在您的 promise 代码中您没有等待。做同样的事情,你的第一个then
回调需要返回aUser.login
的 promise 返回。否则, promise 您第一次调用then
返回值被解析为undefined
,而不是根据aUser.login
的决议或拒绝来解决 promise 。您为
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/