javascript - 无法一一执行数组中的承诺
javascript - not able to execute the promise from array one by one
我发现我无法一一兑现承诺
这是我的代码
const promises = mkt.map((marketItem) => {
return context.program.account.chain
.fetch(marketItem[0].instrument)
.then((instrumentRes) => {
return Test(context, marketItem[0]).then(
testResult => {
return Promise.all([
functionA(),
functionB(),
]).then((result) => {
return result
});
}
);
});
});
console.log(promises)
for (let i=0; i < promises.length; i++) {
const val = await promises[i]();
console.log(val);
}
错误
promises[i]() is not a function
为什么会这样?我该如何解决?
promises[i]() is not a function
正确,这是因为 promises
是 Promise
个对象的数组,而不是函数。
您可以将此 promises
数组转储到 Promise.all
并等待它们全部解析。
Promise.all(promises)
.then(resolvedPromises => {
// handle array of resolved promises
});
but I am working on some real time update stuff. If I use Promise.all
it will throw error Too many request
, so I want to do it one by one to
see the effect
为此,我想你想迭代 mkt
数组并等待每个创建的 Promise 解决。将映射回调重构为一个独立函数,您可以在 for-loop 中手动调用该函数,等待 Promise 解决。
const request = (marketItem) => {
return context.program.account.chain
.fetch(marketItem[0].instrument)
.then((instrumentRes) => Test(context, marketItem[0]))
.then(testResult => Promise.all([functionA(), functionB()]))
.then((result) => result);
}
for (let i=0; i < mkt.length; i++) {
try {
const val = await request(mkt[i]);
console.log(val);
} catch(error) {
// handle any error
}
}
只需从 await 调用中删除 ()
应该就可以了。
const val = await promises[i];
但是请记住,那时所有的承诺都已经“开始”(我不知道更好的词),你只是在检索结果或 await
呼叫.
我发现我无法一一兑现承诺
这是我的代码
const promises = mkt.map((marketItem) => {
return context.program.account.chain
.fetch(marketItem[0].instrument)
.then((instrumentRes) => {
return Test(context, marketItem[0]).then(
testResult => {
return Promise.all([
functionA(),
functionB(),
]).then((result) => {
return result
});
}
);
});
});
console.log(promises)
for (let i=0; i < promises.length; i++) {
const val = await promises[i]();
console.log(val);
}
错误
promises[i]() is not a function
为什么会这样?我该如何解决?
promises[i]() is not a function
正确,这是因为 promises
是 Promise
个对象的数组,而不是函数。
您可以将此 promises
数组转储到 Promise.all
并等待它们全部解析。
Promise.all(promises)
.then(resolvedPromises => {
// handle array of resolved promises
});
but I am working on some real time update stuff. If I use
Promise.all
it will throw errorToo many request
, so I want to do it one by one to see the effect
为此,我想你想迭代 mkt
数组并等待每个创建的 Promise 解决。将映射回调重构为一个独立函数,您可以在 for-loop 中手动调用该函数,等待 Promise 解决。
const request = (marketItem) => {
return context.program.account.chain
.fetch(marketItem[0].instrument)
.then((instrumentRes) => Test(context, marketItem[0]))
.then(testResult => Promise.all([functionA(), functionB()]))
.then((result) => result);
}
for (let i=0; i < mkt.length; i++) {
try {
const val = await request(mkt[i]);
console.log(val);
} catch(error) {
// handle any error
}
}
只需从 await 调用中删除 ()
应该就可以了。
const val = await promises[i];
但是请记住,那时所有的承诺都已经“开始”(我不知道更好的词),你只是在检索结果或 await
呼叫.