如何将单独的值与承诺的结果一起返回



我正在返回一个promise,但我试图返回一个字符串AND一个promise。有没有一种方法可以在不必从承诺中返回的情况下将两者联系起来?

例如,如果我的输入是

[
{
keepme:"abcd",
sql:"select top(1) * from X"
}
]

我的目标是归还

[
{
keepme:"abcd",
sql:"select top(1) * from X",
resultOfPromise:[{columnA:1,columnB:2}]
}
]

这是我迄今为止的代码。它返回promise,但不返回abcd值:

let qq=[{keepme:"abcd",sql:"select top(1) * from X"}]
async function myFunc(sql:string){
return [{columnA:1,columnB:2}]
}
async function run(){
let prom=qq.map((qq) => myFunc(qq.sql));
for (let p of await (Promise as any).allSettled(prom)) {
console.log(p.value)
}
}
run();

您可以返回一个具有promise结果的对象作为其属性之一:

const getDataWithInputs = async (keepme, ...input) => {
let data = await getData(...input);
return {
data,
input,
keepme
}
}

调用时:

let prom = qq.map((qq) => myFunc(qq.keepme, qq.sql));

此外,您应该始终用空格填充运算符。

您可以使map回调async,并将带有await的承诺值注入到一个新的对象文字中,该文字复制qq:中的其他属性

let qq = [{keepme: "abcd", sql: "select top(1) * from X"}];
async function myFunc(sql) {
return [{columnA: 1, columnB: 2}];
}
async function run(){
let prom = qq.map(async (qq) => ({
...qq,
resultOfPromise: await myFunc(qq.sql)
}));
for (let p of await Promise.allSettled(prom)) {
console.log(p.value);
}
}
run();