为了账号安全,请及时绑定邮箱和手机立即绑定

关于Promise的内存释放问题

关于Promise的内存释放问题

慕仙森 2019-02-19 16:11:37
Promise(fun_father)函数里包含了Promise(fun_son)函数,如果fun_father先resolve(),此时fun_son还没执行完,那么fun_son是会继续执行下去,还是终止?let status= 0const fun_father= () => {    return new Promise((resolve, reject) => {         fun_son().then(() => {             status= 1         })        //例如请求之类的异步方法......             resolve("fun_father done")     })  }const fun_son = () => {    return new Promise((resolve ,reject) => {        //例如请求之类的异步方法......             resolve("fun_son done")     }) } fun_father().then(msg => {    console.log(msg) })在写项目时碰到这种情况,简化后就是类似上面一样,我是希望能打印出"fun_father done",并且status也能改变为1。 这么写后,领导和我说如果fun_son执行得比fun_father快就没问题,但是如果反之,则会因为fun_father返回了,内存释放,fun_son就会终止执行。我对此还是有存疑的,但是自己试验的话没有好的测试异步方法(循环没用),setTimeout 是可以的,但不能完全说明。所以想请教大佬们,这样的写法是否可行。
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

首先,Promise的作用是控制异步流程,如果你想要保证打印fun_father done的时候status一定置为1,那么你可以写成这样:

let status= 0const fun_father= () => {    return new Promise((resolve, reject) => {
        fun_son().then(() => {
            status= 1
        }).then(() => {            //例如请求之类的异步方法......
            resolve("fun_father done")
        })
    }) 
}const fun_son = () => {    return new Promise((resolve ,reject) => {        //例如请求之类的异步方法......
        resolve("fun_son done")
    })
}

fun_father().then(msg => {    console.log(msg)
})


查看完整回答
反对 回复 2019-02-19
?
四季花海

TA贡献1811条经验 获得超5个赞

代码没有问题啊

查看完整回答
反对 回复 2019-02-19
  • 2 回答
  • 0 关注
  • 662 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信