我使用Sequelize
数据库orm
并使用此代码
model.create(
{
username: 'John'
} ).then( function (result) {
return result.userUniqueId;
} );
我可以在数据库中创建新用户,我可以在userUniqueId
内打印then()
。
创建用户之后我想在其他功能中使用返回的userUniqueId
或仅在控制台上打印,但我无法从中返回result.userUniqueId
,以解决此问题。我试图使用Promise
获得结果然后我将其部署到:
'use strict';
module.exports = {
createNewUser: function (model) {
return new Promise(
function (resolve, reject) {
model.create(
{
username: 'John'
} ).then( function (result) {
return result.userUniqueId;
} );
} )
.then( function (result) {
resolve( result.userUniqueId );
} );
},
};
但是我在createNewUser
函数之外得到了console.log( controller.createNewUser( models.users ) );
结果:
Promise { <pending> }
我该如何解决这个问题?
'use strict';
module.exports = {
createNewUser: function (model) {
return new Promise((resolve, reject) => {
return model.create(
{
username: 'John'
})
.then(function (result) {
return result.userUniqueId;
})
.then(value => resolve(value));
});
},
};
和
var userId = controller.createNewUser(models.users)
.then(function (userId) {
return userId;
});
console.log(userId);
打印承诺对象
答案 0 :(得分:0)
这不是问题。除了已创建的已解决或拒绝的承诺(分别直接使用Promise.resolve()
和Promise.reject()
),所有承诺都在&#34; pending&#34;中创建。状态。
当调用Promise的resolve()
函数时,该状态将发生变化。
顺便说一下,你陷入了Promise构造函数反模式。而不是:
return new Promise((resolve, reject) => {
doSomething()
.then(value => resolve(value));
});
只做
return doSomething()
无需使用其他Promise构造函数包装Promises。
答案 1 :(得分:0)
与任何承诺一样,您需要使用then
来访问其结果值:
controller.createNewUser( models.users )
.then(function (userId) {
// do something with the ID
});
您无法直接访问承诺中的值,因为承诺可能尚未解决。
正如马达拉指出的那样,你已经陷入了明确的承诺建构反模式。摆脱无关的代码:
module.exports = {
createNewUser: function (model) {
return model.create(
{
username: 'John'
} )
.then( function (result) {
return result.userUniqueId;
} );
},
};