gpt4 book ai didi

javascript - 使用单独的 API 调用将消息列表存储在数组中

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:25 25 4
gpt4 key购买 nike

所以本质上我有一个函数可以进行 API 调用,获取消息 ID 列表,如下所示:

function getMessageList(auth) {
api.users.messages.list({
auth: auth,
userId: 'me',
}, function(err, response) {
if (err) {
console.log('The API returned an error: ' + err);
return;
}

var messages = response.messages;

if (messages.length == 0) {
console.log('No messages found.');
} else {
console.log('messages:');

var messageList = [];
for (var i = 0; i < messages.length; i++) {
var message = messages[i].id;
getMessage(auth, message, function(response) {
messageList.push(response);
console.log(messageList);
});
}
}

});
}

使用该 ID 列表,我需要调用每个单独的 ID 来获取消息内容,如下所示:

function getMessage(auth, messageId, callback) {
api.users.messages.get({
auth: auth,
userId: 'me',
id: messageId
}, function(err, response) {
if(err) {console.log(err); }
callback(response);
});
}

基本上,我希望能够创建一个消息数组,我正在使用该回调执行此操作,但也能够在回调函数之外使用它。可能是一个有点愚蠢的问题,但我对我的 JS 有点生疏。

我想将该循环放在一个单独的函数(generateMessageList())中并使用 then() promise ,但我无法让它工作......也许我的语法已经关闭。这是它的样子:

function generateMessageList(auth, messages) {
var messageList = [];
for (var i = 0; i < messages.length; i++) {
var message = messages[i].id;
getMessage(auth, message, function(response) {
messageList.push(response);
});
}
return messageList;
}

我尝试 generateMessageList(auth, messages).then(console.log(messageList)); 无济于事。

不确定执行此操作的正确方法是什么,任何指导将不胜感激。

最佳答案

您的代码本质上是异步的,使用 promise 。一个很好的例子是 bluebird。所以基本上用 Promise 包装,然后每个 Promise 都会从请求的 catch block 中的成功或错误返回一个对象。有什么意义吗?

var Promise = require('bluebird');

function generateMessageList(auth, messages) {
function getMessage(auth, messageId) {
return new Promise(function(resolve,reject){
api.users.messages.get({
auth: auth,
userId: 'me',
id: messageId
}, function(err, response) {
if(err) {reject(err);}
resolve(response);
});
});

}

然后在你的generateMessageList(auth, messages)

function generateMessageList(auth, messages) {
var messageList = [];
return new Promise(function(resolve,reject){
for (var i = 0; i < messages.length; i++) {
var message = messages[i].id;
var promise = getMessage(auth, message);
promise.then(function(result){ messageList.push(result);}).catch(function(err){reject(err);});
}
resolve(messageList);

});

}

然后无论你在哪里调用generateMessageList(auth, messages)

只需调用 then 并捕获返回的带有消息列表的 promise 。

关于javascript - 使用单独的 API 调用将消息列表存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42614760/

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