我正在返回一个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();