承诺待定
Promise is pending
我的 nodejs 应用程序中有一个 class,代码如下:
var mongoose = require('mongoose');
var Roles = mongoose.model('roles');
var Promise = require("bluebird");
module.exports = Role;
var err = null;
var id;
function Role(name, companyId) {
this.err = err;
this.name = name;
this.companyId = companyId;
this.id = getId(name, companyId);
}
var getId = function (name, companyId) {
return new Promise(function(resolve, reject) {
Roles.findOne({companyId:companyId, name:name}, function(err,result) {
resolve(result._id);
});
});
};
当我调用 class 时,id 待定:
var currentRole = new Role(myRole, comId);
console.log(currentRole);
如何在 class 解析后获取它们的值?
currentRole.id
是一个承诺,所以你可以调用 then()
等待它被解决:
var currentRole = new Role(myRole, comId);
currentRole.id.then(function (result) {
// do something with result
});
虽然这感觉很奇怪 API,但您希望您的对象在其构造函数 returns 时为 "ready to use"。让 getId
成为 Role
原型上的 promise 返回函数可能会更好,因此您改为执行以下操作:
var currentRole = new Role(myRole, comId);
currentRole.getId().then(function (result) {
// do something with result
});
您还应该考虑处理该错误以拒绝承诺:
var getId = function (name, companyId) {
return new Promise(function(resolve, reject) {
Roles.findOne({companyId:companyId, name:name}, function(err,result) {
if (err) {
return reject(err);
}
resolve(result._id);
});
});
};
并为您对 getId
的调用添加一个拒绝处理程序:
var currentRole = new Role(myRole, comId);
currentRole.getId().then(function (result) {
// do something with result
}, function (err) {
// do something with err
});
或等同于:
var currentRole = new Role(myRole, comId);
currentRole.getId().then(function (result) {
// do something with result
}).catch(function (err) {
// do something with err
});
我的 nodejs 应用程序中有一个 class,代码如下:
var mongoose = require('mongoose');
var Roles = mongoose.model('roles');
var Promise = require("bluebird");
module.exports = Role;
var err = null;
var id;
function Role(name, companyId) {
this.err = err;
this.name = name;
this.companyId = companyId;
this.id = getId(name, companyId);
}
var getId = function (name, companyId) {
return new Promise(function(resolve, reject) {
Roles.findOne({companyId:companyId, name:name}, function(err,result) {
resolve(result._id);
});
});
};
当我调用 class 时,id 待定:
var currentRole = new Role(myRole, comId);
console.log(currentRole);
如何在 class 解析后获取它们的值?
currentRole.id
是一个承诺,所以你可以调用 then()
等待它被解决:
var currentRole = new Role(myRole, comId);
currentRole.id.then(function (result) {
// do something with result
});
虽然这感觉很奇怪 API,但您希望您的对象在其构造函数 returns 时为 "ready to use"。让 getId
成为 Role
原型上的 promise 返回函数可能会更好,因此您改为执行以下操作:
var currentRole = new Role(myRole, comId);
currentRole.getId().then(function (result) {
// do something with result
});
您还应该考虑处理该错误以拒绝承诺:
var getId = function (name, companyId) {
return new Promise(function(resolve, reject) {
Roles.findOne({companyId:companyId, name:name}, function(err,result) {
if (err) {
return reject(err);
}
resolve(result._id);
});
});
};
并为您对 getId
的调用添加一个拒绝处理程序:
var currentRole = new Role(myRole, comId);
currentRole.getId().then(function (result) {
// do something with result
}, function (err) {
// do something with err
});
或等同于:
var currentRole = new Role(myRole, comId);
currentRole.getId().then(function (result) {
// do something with result
}).catch(function (err) {
// do something with err
});