Okhttp之Promise訪問(wèn)方式

源起

用vue寫(xiě)過(guò)一段時(shí)間的前端,接觸到了promise的異步處理方式。簡(jiǎn)直不要太牛逼,最主要是解決了回調(diào)地獄的問(wèn)題,可以讓異步任務(wù)的執(zhí)行是從上往下,有一種同步調(diào)用的感覺(jué)。

上代碼看下調(diào)用的效果

OkhttpRequest.
get("https://dldir1.qq.com/WechatWebDev/nightly/p-ae42ee2cde4d42ee80ac60b35f183a99/wechat_devtools_1.02.1911180_x64.exe")
            .toPromise(new FileResponseHandler(new File("d:/")))
            .then(new FileResultHandler<String>() {
                @Override
                public void onProgress(int progress) {
                    System.out.println(progress);
                }

                @Override
                public Promise<String> resolve(File result) {
                    System.out.println(result.getAbsolutePath());
                    Promise<String> promise = OkhttpRequest.get("http://www.baidu.com")
                            .toPromise(OkhttpRequest.STRING_RESPONSE_HANDLER);
                    return promise;
                }

                @Override
                public void reject(Exception e) {

                }
            })
            .then(new ResultHandler<String, String>() {
                @Override
                public Promise<String> resolve(String result) {
                    System.out.println(result);
                    return null;
                }

                @Override
                public void reject(Exception e) {

                }
            })
            .start();

知道你們很聰明,秒懂,我還是稍微啰嗦下,好得我也是花了很多時(shí)間和精力才做到這個(gè)效果的,就BB下怎么啦!

執(zhí)行流程

1、“wechat_devtools_1.02.1911180_x64.exe” 這個(gè)文件先是被下載到d盤(pán)下面,下載過(guò)程中可以實(shí)時(shí)獲取下載的進(jìn)度,嗯,下載嗎,沒(méi)個(gè)進(jìn)度條誰(shuí)尼馬知道下到哪了,摸黑嗎;

2、重點(diǎn)來(lái)了,敲黑板,在resolve方法里面,你可以拿到這個(gè)file,做任何你想做的,當(dāng)成參數(shù)傳給baidu的Promise都可以(話說(shuō)就是考慮到上一個(gè)請(qǐng)求的結(jié)果可能會(huì)在下個(gè)請(qǐng)求時(shí)需要用到才采用這種方式的),它請(qǐng)求的結(jié)果會(huì)回調(diào)到下一個(gè)then方法里面

3、此處是重中之重,start方法一定不能漏(因?yàn)槭嵌栊哉?qǐng)求,在調(diào)用start方法前,啥也不干,就這么靜靜的呆著),就像Thread的start方法一樣。

其它特色

如果不想用Promise模式,也可以用常規(guī)的,當(dāng)然常規(guī)的github上多的不要不要的。而且小星星都超多的,真讓人羨慕。

異步回調(diào):
OkhttpRequest.get("https://dldir1.qq.com/WechatWebDev/nightly/p-ae42ee2cde4d42ee80ac60b35f183a99/wechat_devtools_1.02.1911180_x64.exe")
            .async(new File("d:/"), new DownloadProgress() {
                @Override
                public void onProgress(int progress) {

                }

                @Override
                public void onSuccess(File result) {
                    OkhttpRequest.get("http://www.baidu.com")
                            .async(new HttpCallback<String>() {
                                @Override
                                public void onSuccess(String result) {
                                    
                                }

                                @Override
                                public void onFailure(Exception e) {

                                }
                            });
                }

                @Override
                public void onFailure(Exception e) {

                }
            });

也能用,就是回調(diào)層多了,看的有點(diǎn)頭暈....

同步調(diào)用當(dāng)然不能少:

因?yàn)檗D(zhuǎn)了后臺(tái)開(kāi)發(fā),調(diào)用接口或者下載什么的,還是同步拿到結(jié)果直接返回更舒服。

String sync = OkhttpRequest.get("http://www.baidu.com").sync();
String result = OkhttpRequest.get("http://www.163.com").sync();

是不是很簡(jiǎn)潔?回調(diào)是真占地方

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容