0

比如我有三个函数, 我开始是想要顺序 a, F, b:

x = function
  a()
  F()
  b()
end

但是后来出现需求, F 是一个异步的函数, 但为了方便, 我不打算改 x 的定义.
就是说, 我希望 F() 仍然保持这样的写法, 但是会处理到 F 当中的异步调用..

首先, 这在很多语言里是做不到的...

所以不限制编程语言的话, 是否有方案做到?

题叶 16.9k
2014-05-05 提问

查看全部 5 个回答

0
package main

import "fmt"

func a() {
    fmt.Println("func a()")
}

func b() {
    fmt.Println("func b()")
}

func main() {

    a()
    ch := make(chan int)

    go func() {
        fmt.Println("func f do something")
        <-ch
    }()

    b()
    ch <- 1

    fmt.Println("DONE")
}

推荐答案

1

JS的话Promise机制可以处理这个情况

var x = function() {
    return Promise.cast(a())
        .then(function() {
            return F();
        }
        .then(function() {
            return b();
        }
}

改造后无论a/F/b都可以是异步/同步过程,无需改动x,同步过程返回结果,异步过程返回thenable对象即可

这正是我之前在博客里评论回复的Promise的重要优点第三项 统一异步和同步过程的调用

推广链接