例如有a,b,c三個函數(shù),分別都執(zhí)行同步操作,為了簡化我把同步操作簡化了一下functionc(m){m=m+1;returnm;}functionb(m){m=m+1;returnc(m);}functiona(){letm=0;returnb(m);}執(zhí)行a()輸出的是2但是如果c函數(shù)執(zhí)行的不是同步函數(shù),是異步操作例如functionc(m){setTimeout(function(){m=m+1;},1000)returnm;}執(zhí)行a()時,要想正確輸出2,就得把c通過promise或者async進(jìn)行封裝,類似functionpromiseC(m){returnnewPromise((resolve,reject)=>{setTimeout(function(){m=m+1;resolve(m);},1000)}}asyncfunctionc(m){m=awaitpromiseC(m);returnm;}因?yàn)閏變?yōu)楫惒胶瘮?shù),b要調(diào)用c,b也要改為異步的,如此類推a也得改為異步asyncfunctionb(m){m=m+1;returnawaitc(m);}asyncfunctiona(){letm=0;returnawaitb(m);}a().then(function(data){console.log(data)})這樣才能輸出2為了正確輸出2,我把a(bǔ),b都改變了,不知道有沒有其他方法可以避免改變a,b又能達(dá)到正確輸出呢?由于剛開始寫代碼時沒有考慮到異步的情況,像a,b這些函數(shù)都是分布到不同文件里面,而且數(shù)量比較多,現(xiàn)在為了讓c可以執(zhí)行異步操作,改起來太難了,不知道大家有沒有其他好的方法?下面是新添加的問題利用下面回答中直接返回promise對象的方法可以解決以上的問題,但是實(shí)際代碼更多的結(jié)構(gòu)是這樣的functionc(m){m=m+1;returnm;}functionb(m){m=m+1;letn=c(m)n=n+1returnn;}functiona(){letm=0;letk=b(m);k=k+1;returnk;}如果按這個方法,我得改造a,b的return方法才能讓a,b返回promise對象,對于這樣的結(jié)構(gòu)不知道還有沒有不改動a,b函數(shù)實(shí)現(xiàn)正確輸出的方法
nodejs實(shí)現(xiàn)異步時遇到的一個問題
翻翻過去那場雪
2019-05-25 17:59:15