JavaScript承诺设置
我是一名经验丰富的工程师,但JavaScript中的承诺仍然让我非常困惑。最重要的是,我所在的项目使用流来键入JavaScript 因此,我有一个函数a,它返回从网络请求返回的URL列表。这个函数实际上返回一个承诺,并且是异步的。(返回类型为JavaScript承诺设置,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,我是一名经验丰富的工程师,但JavaScript中的承诺仍然让我非常困惑。最重要的是,我所在的项目使用流来键入JavaScript 因此,我有一个函数a,它返回从网络请求返回的URL列表。这个函数实际上返回一个承诺,并且是异步的。(返回类型为Promise) 现在,我需要添加另一个同样返回URL列表的请求。和以前一样,我们将其称为函数B。(相同的返回类型Promise) 然后,原始函数的调用方希望返回一个承诺。我想做一个函数C,首先调用函数B,然后根据函数B的结果,它要么返回那个承诺,要么调用函
Promise
)
现在,我需要添加另一个同样返回URL列表的请求。和以前一样,我们将其称为函数B。(相同的返回类型Promise
)
然后,原始函数的调用方希望返回一个承诺。我想做一个函数C,首先调用函数B,然后根据函数B的结果,它要么返回那个承诺,要么调用函数a并返回它的承诺
我必须保持它的异步性,而就我的一生而言,我无法理解这一点。如何编写函数C
请停下来!我希望这是有道理的
附言。
有点像这样:
async getAllURLs(): Promise<?Array<SignedURL>>
{
let result: Promise<?Array<SignedURL>> = Promise.resolve([]); // wrong
let res1 = this.getBetterUrls().then((urls) =>
{
if (urls && urls.length > 0)
{
result = res1;
}
else
{
let res2 = this.getOldUrls().then((lesserUrls) =>
{
if (lesserUrls && lesserUrls.length > 0)
{
result = res2;
}
});
}
});
return result; // wrong
}
async getAllURLs():Promise我想这会起作用:
async getAllURLs(): Promise<Array<SignedURL>> {
const betterUrls = await this.getBetterUrls();
if (betterUrls && betterUrls.length > 0) { return betterUrls; }
const lesserUrls = await this.getOldUrls();
return lesserUrls && lesserUrls.length > 0 ? lesserUrls : [];
}
async getAllURLs():Promise{
const betterUrls=等待这个;
如果(betterUrls&&betterUrls.length>0){return betterUrls;}
const lesserUrls=等待此消息。getOldUrls();
返回lesserUrls&&lesserUrls.length>0?lesserUrls:[];
}
这不是一个同步吗?不,这正是使用async
/await
编写异步代码的方式。async getAllURLs
@太空熊-线索在单词async
。。。肯定是异步的,因为调用方没有执行wait?wait…
在内部使用afaik,所以您不必手动创建它。调用async
函数时,您会得到一个用于跟踪函数返回的承诺。