gpt4 book ai didi

javascript - Node.js Q promise then() 链接不等待

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:12 25 4
gpt4 key购买 nike

我正在尝试重构以下代码以避免回调 hell ,将其转换为:

createUser(user_data)
.then(createClient(client_data))
.then(createClientPartner(clientpartner_data))
.then(function(data) {
cb(null, _.pick(data,['id','username']));
}, function(error) {
cb(error);
});

如您所见,我为每个步骤创建了一个方法:

function createUser(user_data) {
console.log('createUser');
var deferred = Q.defer()

new db.models.User.create(user_data, function(err, user) {
console.log('createUser done');
if (!!err)
deferred.reject(err);
else {
client_data['id'] = user.id;
deferred.resolve(user);
}
});

return deferred.promise;
}

其他方法具有相同的 console.log 调用,以便能够遵循执行路径。

我希望它是:

  • 创建用户
  • 创建用户完成
  • 创建客户端
  • 创建客户端完成
  • 创建客户伙伴
  • 创建ClientPartner 完成

但相反,它是:

  • 创建用户
  • 创建客户端
  • 创建客户伙伴
  • 创建ClientPartner 完成
  • 创建用户完成
  • 创建客户端完成

为什么之前的promise还没有解决,函数就被触发了?我希望“然后”等到之前的 promise 得到解决或拒绝后才能继续。我是否遗漏了有关 promises 的一些重要信息?

最佳答案

问题是你传递的不是函数,而是函数调用的结果。

代替

createUser(user_data)
.then(createClient(client_data))

你应该有

createUser(user_data)
.then(function(user){
createClient(client_data) // no need for the user ? really ?
})

关于javascript - Node.js Q promise then() 链接不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com