javascript – 从承诺中回报承诺
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 从承诺中回报承诺,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2098字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 从承诺中回报承诺](/upload/InfoBanner/zyjiaocheng/745/3599041488c54a3a87eef2001dd8f976.jpg)
我想知道如何从承诺中回报承诺.例如.
我有这样的结构:
doAsyncStuff() // a promise
.then( function(res) {
doAnotherAsyncStuff(res) // another promise
.then( makeSomeThings )
.then( function(anotherRes, opts) {
...
})
})
.then( ... )
我想这样写:
doAsyncStuff() // a promise
.then( function(res) {
doAnotherAsyncStuff(res) // another promise
.then( makeSomeThings )
// and somehow push-out promise
})
.then( function(anotherRes) {
...
})
.then( ... )
我怎样才能达到这样的效果?
问题的事情
var Promise = require('bluebird');
//noinspection JSUnresolvedFunction
var bcrypt = Promise.promisifyAll(require('bcrypt'));
var Sequelize = require('sequelize');
var config = require('config');
var sequelize = new Sequelize(config.get('db.connstring'));
//noinspection JSUnresolvedFunction
var User = sequelize.define('user', {
name: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING,
validate: {
isEmail: true
}
},
passwordHash: {
type: Sequelize.STRING
},
isConfirmed: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
}
}, {
freezeTableName: true,
classMethods: {
login: Promise.method(function (email, password) {
if (!email || !password) throw new Error('Email and password are both required');
var rv = this
.find({where: {email: email.toLowerCase().trim()}})
.then(function (user) {
return bcrypt.compareAsync(password, user.passwordHash).then(function (res) {
console.log(email, password, res);
});
// if i dont use pacthed compare here, i have no problem ..
// return bcrypt.compare(password, user.passwordHash, function(err, res) {
// console.log(email, password, res);
// });
});
console.log('B', rv);
return rv;
})
}
});
sequelize.sync({force: true}).then(function () {
var pwd = 'pwd';
//noinspection JSUnresolvedFunction
bcrypt.hashAsync(pwd, 4).then(function (salt) {
var u1 = User.create({
name: 'u1',
email: 'u1@ex.com',
passwordHash: salt
}).then(function (result) {
User.login('u1@ex.com', pwd).then(function (res) {
console.log('A', res)
})
});
});
});
解决方法:
只要回复你的另一个承诺
doAsyncStuff() // a promise
.then( function(res) {
return doAnotherAsyncStuff(res) // another promise
})
.then( function(anotherRes) {
...
})
.then( ... )
内容总结
以上是互联网集市为您收集整理的javascript – 从承诺中回报承诺全部内容,希望文章能够帮你解决javascript – 从承诺中回报承诺所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】