我的下面的代码工作正常,我可以用数据库创建一些数据,但之后我需要从中获取最新插入的id以用于代码的其他地方,但是这个函数导出了返回promise对象,我可以& #39; t将变量指定为函数结果,例如:
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));
});
},
};
返回Promise对象,我不能将带有返回结果的变量指定为
return result.userUniqueId;
我希望得到结果并使用以下代码打印或指定变量作为结果:
console.log( controller.createNewUser( models.users ) );
答案 0 :(得分:1)
是的,使用协同程序和yield你实际上可以暂停方法的执行并将co函数返回给调用者,并且调用者可以通过使用带有传递给分数的参数的co函数对象来恢复执行例程 - 但是例程没有办法将半生不熟的数据传回调用者,也没有办法在这个上下文中有意义:在你的代码中,直到你生成用户的唯一ID,没有什么可以返回调用者,唯一ID生成是异步的,并且在执行所有回调之前不会结束。简而言之,协程用例不适用于此处。希望这澄清。
答案 1 :(得分:0)
解析promise语义:
出路#1:创建并向调用者返回promise和事务,然后管理调用者中的其余链(丑陋)。
出路#2:将promise视为旧异步调用链的语义包装器,并在promise链的叶子中处理结果处理(推荐)。
底线:调用者在调用中没有任何赌注,被调用者参与异步调用。
希望这有帮助。