gpt4 book ai didi

Javascript promise 链接

转载 作者:行者123 更新时间:2023-12-02 16:16:06 25 4
gpt4 key购买 nike

我正在为移动应用程序使用 Parse Cloud 函数,但它们都遵循异步性质。因此,为了克服这种性质,我开始使用 javascript Promises。但 promise 也没有给我想要的输出。

问题是:second-thenthird-then之后执行。在third-then中,getRecommendedGroupgroups的参数正在获取[]

getRecommendedGroup(request.params.email, groups, function(data){
this is a callback
});

基本上groups2nd then的输出。

那么我应该如何编写代码才能使 2nd-then3rd-then 之前执行。

下面是代码片段

Parse.Cloud.define("getGroup", function(request, response) {
var grpMember = new Parse.Query("GroupMember"),
groupIds = [],
groupObj = {};

grpMember.equalTo("user", request.params.email);
//from the groupMember we're taking groupId
grpMember.find()
.then(function(grpMemberResponse) {
grpMemberResponse.forEach(function(value, index) {
var memberObj = value;
groupIds.push(memberObj.get("groupId").id);
});
return groupIds;
})
//with this groupId we're retriving group and pushing it to an groupArr
.then(function(groupIds) {

var groupArr = [];
var promises = [];

groupIds.forEach(function(value, index) {
alert("GroupId :: " + value);
promises.push(findGroup(value, function(group) {
groupArr.push(group);
});
});
return Parse.Promise.when(promises);
})
.then(function(groups) {

alert("GroupArr :: " + JSON.stringify(groups));
getRecommendedGroup(request.params.email, groups, function(data) {

groupObj["own"] = groups;
groupObj["recommended"] = data;
response.success(groupObj);
});
});
});

var findGroup = function(objectId, callback) {
var groupQuery = new Parse.Query("Group");

groupQuery.get(objectId, {
success: function(group) {
alert("Group Obj Id ::" + group.id);
callback(group);
},
error: function(error) {
alert("Error while finding Group " + error);
}
});
};

最佳答案

第二个 then 正在运行,但它正在调用异步函数。为了正确排序,必须履行循环启动的那些 promise 。幸运的是,Promise.when() 做到了这一点...

.then(function(groupIds) {
var findPromises = []
groupIds.forEach(function(value, index) {
findPromises.push(findGroup(value, function(group));
)};
return Parse.Promise.when(findPromises);
}).then() {
// arguments is now a (var arg) array of results from running
// all of the findPromises promises
});

编辑 - 为了使其工作,代码需要推送一个 promise 来进行查找。这意味着 findGroup 必须返回一个 promise ...

function findGroup(objectId) {
var groupQuery = new Parse.Query("Group");
return groupQuery.get(objectId);
}

关于Javascript promise 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29577256/

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