小编Zho*_* Xu的帖子

如何使 Promise 的结果全部按顺序排列

问题:case1的输出是0到4,是有序的,而case2的输出是随机的。

我知道case1的结果之所以是有序的,是因为该请求是在前一个请求的结果到来之后发送的。在 case2 中,该请求将不会等待前一个请求的结果。

我的问题是有没有办法也按顺序保留 case2 的结果?

情况1

const main = async () => {
    const arr = Array.of(...[1,2,3,4,5])

    for (let i=0;i<arr.length;i++) {
        console.log(`request:${i}`)
        const res = await request(i)
        console.log(res)
    }


    console.log("next step")

}

const request = (i:number):Promise<number> => {
    return new Promise<number>(((resolve, reject) => {
        setTimeout(()=>{
            resolve(i)
        },Math.random() * 1000)
    }))
}

Run Code Online (Sandbox Code Playgroud)

输出1

closure
request:0
0
request:1
1
request:2
2
request:3
3
request:4
4
next step

Run Code Online (Sandbox Code Playgroud)

案例2

const main = async () => {
    const arr = Array.of(...[1,2,3,4,5])
    await …
Run Code Online (Sandbox Code Playgroud)

javascript promise es6-promise

3
推荐指数
1
解决办法
2256
查看次数

为什么杜松子酒的处理者的日常工作会一直持续到最后

我知道,如果goroutine B是从某个goroutine A开始的,如果goroutine A结束,那么无论goroutine B走多远,它都会被强制结束。

\n
func main()  {\n    go simulateGinAPI()\n    fmt.Println("finish...")\n}\n\nfunc simulateGinAPI() {\n    fmt.Println("ginAPI....")\n    go backgroundProcess()\n}\n\n\nfunc backgroundProcess() {\n    fmt.Println("calculating...")\n    fmt.Println(calculate(45))\n}\n\nfunc calculate(x int) int {\n    if x < 2 {\n        return x\n    }\n    return calculate(x-1) + calculate(x-2)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
func main()  {\n    go simulateGinAPI()\n    fmt.Println("finish...")\n}\n\nfunc simulateGinAPI() {\n    fmt.Println("ginAPI....")\n    go backgroundProcess()\n}\n\n\nfunc backgroundProcess() {\n    fmt.Println("calculating...")\n    fmt.Println(calculate(45))\n}\n\nfunc calculate(x int) int {\n    if x < 2 {\n        return x\n    }\n    return calculate(x-1) + calculate(x-2)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

正如输出日志所示。斐波那契和的结果不会被注销,而是仅注销“完成”。

\n
\n

然而,正如下面的代码所示,如​​果我们从 Gin 的句柄开始 goroutine,即使发送了响应,计算斐波那契和结果的 goroutine …

go goroutine

2
推荐指数
1
解决办法
1706
查看次数

标签 统计

es6-promise ×1

go ×1

goroutine ×1

javascript ×1

promise ×1