gpt4 book ai didi

javascript - 如何在 for 循环中组织 promise 并在 javascript 函数之间传递参数?

转载 作者:行者123 更新时间:2023-11-29 18:05:38 24 4
gpt4 key购买 nike

我正在尝试用 javascript 实现我的第一个 promise 。我有这些功能。必须完成每个功能才能进入下一步:

F1 --> get Current User Id
and save it to var "MyUserID"

F2 --> getUserEvent (example 10 events)
Go to a for loop for each event
and for each iteration save value to var "EventId"

F3--> Get info for that specific event from facebook
This function has 2 parameters (MyUserID,EventId)

F4--> Get image for that specific event
This function has 1 parameter (EventId)

f5--> Save info to DB
Go back to the loop

为了实现这一点,我做了以下操作,但我知道它不起作用。如果有任何有 promise 经验的人可以为我展示原型(prototype),我真的很感激。我不确定如何在函数之间传递参数:

var getMyID = function() {
return new Promise(function(resolve, reject) {
// Get my id from facebook
FB.api('/me', function(response) {
if (response && !response.error) {
console.log("response== "+ JSON.stringify(response));
retuen(response.id);//MyUserId
}
});
});
};

getMyID.then(function(myID) {
FB.api('/me/events', function(response) {
console.log("response== "+ JSON.stringify(response));

for(i=0; i<response.data.length;i++) {

console.log("eventID= "+response.data[i].id);
getEvent(response.data[i].id,myID);
}
});

}).catch(function(error) {

console.log('oh no', error);

}).then(function(eventID,myID) {
FB.api("/"+ eventID , function (response3) {

if (response3 && !response3.error) {
//....
if(myID == response3.owner.id && diff < 0 )
{
//save to DB -- Another place I need to add promise

}

}
});
});

最佳答案

我看到以下错误:

  • getMyID 返回的 promise 永远不会得到解决或拒绝。
  • getMyID.then行不通,因为 getMyIDFunction , 不是 Promise .也许你的意思是getMyID().then(...)
  • 调用/me/events 的回调应该返回 Promise所以它是异步的。按照目前的情况,它将启动对 Facebook API 的调用并转到下一个 then。之后立即处理。
  • 与最后一个相同then处理程序。
  • 你应该把catch最后,它会捕获所有错误。
  • 打字错误 retuen而不是 return .

为了 DRY,我建议您围绕 Facebook API 创建一个 Promise 返回包装器。像这样:

function fbAPIRequest(url) {
return new Promise(function (resolve, reject) {
FB.api(url, function(response) {
if (response && !response.error) {
resolve(response);
} else {
reject(response);
}
});
};
}

这将使您的代码更简单一些:

var myUserID;

fbAPIRequest('/me')
.then(function (response) {
myUserID = response.id;
return fbAPIRequest('/me/events');
})
.then(function (response) {
var eventPromises = response.data.map(function (data) {
return getEvent(data.id, myUserID);
});
return Promise.all(eventPromises);
})
.catch(function(error) {
console.log('oh no', error);
});

function getEvent(eventID, userID) {
return fbAPIRequest('/' + eventID)
.then(function (response) {
if (response.owner.id === userID && diff < 0) {
return saveToDB(response);
}
});
}

function saveToDB(event) {
return new Promise(...);
}

您会注意到我通过返回值(这成为链中的下一个回调消耗的值)、返回将解析为值的 promise 或利用闭包(例如设置 myUserID)在回调之间传递数据。变量)。

关于javascript - 如何在 for 循环中组织 promise 并在 javascript 函数之间传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31459305/

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