国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開発 WeChat 開発での async/await の使用

WeChat 開発での async/await の使用

Jun 06, 2020 pm 05:36 PM
WeChat アプレット

WeChat ミニ プログラムには、wx.login()、wx.request()、wx.getUserInfo() などの非同期呼び出しであるインターフェイスが多數(shù)あり、これらはすべてパラメーターとしてオブジェクトを使用します。そして、非同期呼び出しのさまざまな狀況でコールバックとして機(jī)能する success()、fail()、および complete() を定義します。

しかし、コールバックの形式でプログラムを書くのは本當(dāng)に面倒です。これらのことを順番に実行する必要があるプロセスがある場合:

  • wx.getStorage( ) キャッシュデータの取得、ログインステータスの確認(rèn)

  • wx.getSetting() 設(shè)定情報(bào)の取得、

  • wx.login() 設(shè)定情報(bào)の使用ログイン

  • wx.getUserInfo() ログイン後のユーザー情報(bào)の取得

  • #wx.request() ビジネスへのデータリクエストの開始サーバー

  • #すると、コードはおそらく次のようになります
#
wx.getStorage({
    fail: () => {
        wx.getSetting({
            success: settings => {
                wx.login({
                    success: ({ code }) => {
                        wx.getUesrInfo({
                            code,
                            success: (userInfo) => {
                                wx.request({
                                    success: () => {
                                        // do something
                                    }
                                });
                            }
                        });
                    }
                });
            }
        });
    }
});
##明らかに、async/await を使用すると、同じロジックのコードがより快適に見えるようになります。ただし、「WeChat 開発者ツール」はデフォルトでは async/await をサポートしていません。有効にするにはどうすればよいですか?

1. async/await を使用する

興味がある場合は、公式 WeChat アプレット ドキュメントで async を検索すると、「ツール ? 開発アシスタント」が見つかります。 ? コード コンパイル 「async/await のサポートについては、ページに記載されています。これは、「コンパイルの追加」セクションの表にあります。抜粋があります:



1.02 の開発ツール.1904282 以降のバージョンでは、ES6 を ES5 に変換する機(jī)能を強(qiáng)化するために、拡張コンパイル オプションが追加されました。有効にすると、新しいコンパイル ロジックが使用され、開発者が使用できる追加のオプションが提供されます。

非同期/待機(jī)構(gòu)文をサポートし、オンデマンドで regeneratorRuntime を挿入します。ディレクトリの場所は補(bǔ)助関數(shù)と一致します。

  • つまり、「WeChat Developer Tools」がv1.02.1904282以降にアップデートされていれば、npm install regeneratorなどの作業(yè)は必要なく、async/awaitを使用するように設(shè)定項(xiàng)目を変更するだけで済みます。特徴。この設(shè)定は「ツールバー?詳細(xì)?ローカル設(shè)定」ページにあります。

async/await が利用できることをすぐに確認(rèn)するには、app.js の onLaunch() イベント関數(shù)にコードを追加します。 #短期間の自動コンパイル 実行後、デバッガー インターフェイスの [コンソール] タブに出力が表示されます: WeChat 開発での async/await の使用

(async () => {    const p = await new Promise(resolve => {
        setTimeout(() => resolve("hello async/await"), 1000);
    });    console.log(p);
})();

そうでない場合は、まず「WeChat 開発者ツール」のバージョンを確認(rèn)してください - 少なくとも、最新バージョンのダウンロードは機(jī)能しません。問題があります。

2. wx.abcd 非同期メソッドの変換

async/await はサポートされていますが、wx.abcd を変更する必要があります。 () は Promise スタイルでカプセル化する必要があるだけです。 Node.js は、Node.js スタイルのコールバックを Promise スタイルに変換するための util モジュールで promisify を提供しますが、明らかに、これは wx スタイルでは機(jī)能しません。あまり考えずに自分でやってみてください。たとえば、wx スタイルの非同期呼び出しは形式的にはすべて一貫しています。その特徴は次のとおりです。 3 つの主要なコールバックを含むすべてのパラメータ


success: (res) => 非同期メソッドが成功したときの任意のコールバック

  • fail: (err) = > 非同期メソッドが失敗したときの任意のコールバック

  • ##complete: () => 非同期メソッドが完了したときの任意のコールバック (成功または失敗に関係なく)
  • ##したがって、wx.abcd() が Promise スタイルに変更され、async/await を通じて記述された場合、おそらく次のようになります。
  • hello async/await
  • もちろん、catch 部分とfinally 部分はそうではありません。 Must、つまり、必ずしも try ブロックを使用する必要はありません。ただし、キャッチを使用しない場合、後述する落とし穴が発生します。今最初にやるべきことは変革です。

  • 2.1. 定義 promisify()

  • promisify() 就是一個封裝函數(shù),傳入原來的 wx.abcd 作為參加,返回一個 Promise 風(fēng)格的新函數(shù)。代碼和解釋如下:

    function promisify(fn) {
        // promisify() 返回的是一個函數(shù),
        // 這個函數(shù)跟傳入的 fn(即 wx.abcd) 簽名相同(或兼容)
        return async function(args) {
        //                    ^^^^ 接受一個單一參數(shù)對象
            return new Promise((resolve, reject) => {
        //             ^^^^^^^^^^^ 返回一個 Promise 對象
                fn({
        //      ^^ ^ 調(diào)用原函數(shù)并使用改造過的新的參數(shù)對象
                    ...(args || {}),
        //          ^^^^^^^^        這個新參數(shù)對象得有原本傳入的參數(shù),
        //                      ^^  當(dāng)然得兼容沒有傳入?yún)?shù)的情況
                    success: res => resolve(res),
        //          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  注入 success 回調(diào),resovle 它
                    fail: err => reject(err)
        //          ^^^^^^^^^^^^^^^^^^^^^^^^ 注入 fail 回調(diào),reject 它
                });
            });
        };
    }

    舉例使用它:

    const asyncLogin = promisify(wx.login);  // 注意別寫成 wx.login(),為什么,我不說
    try {
        const res = asyncLogin();
        const code = res.code;
        // do something with code
    } catch (err) {
        // login error
    } finally {
        // promisify 里沒有專門注入 complete 回調(diào),
        // 因?yàn)?complete 的內(nèi)容可以寫在這里
    }

    2.2. 定義 wx.async()

    不過老實(shí)說,把要用的異步方法通過 promisify 一個個處理,寫起來還是挺煩的,不如寫個工具函數(shù)把要用的方法一次性轉(zhuǎn)換出來。不過一查,wx 下定義了不知道多少異步方法,還是退而求其次,用到啥轉(zhuǎn)啥,不過可以批量轉(zhuǎn),轉(zhuǎn)出來的結(jié)果還是封裝在一個對象中。整個過程就是迭代處理,最后把每個處理結(jié)果聚焦在一起:

    function toAsync(names) {    // 這里 names 期望是一個數(shù)組
        return (names || [])
            .map(name => (
                {
                    name,
                    member: wx[name]
                }
            ))
            .filter(t => typeof t.member === "function")
            .reduce((r, t) => {
                r[t.name] = promisify(wx[t.name]);
                return r;
            }, {});
    }

    這個 toAsync 的用法大致是這樣的

    const awx = toAsync(["login", "request"]);
    await awx.login();
    await awx.request({...});

    有些人可能更習(xí)慣單個參數(shù)傳入的方式,像這樣

    const awx = toAsync("login", "request");

    那么在 toAsync 的定義中,參數(shù)改為 ...names 就好,即

    function toAsync(...names) { ... }

    還沒完,因?yàn)槲也幌朐诿恳粋€ JS 文件中去 import { toAsync } from ...。所以把它在 App.onLaunch() 中把它注入到 wx 對象中去,就像這樣

    App({
        onLaunch: function() {
            // ...
            wx.async = toAsync;
            // ...
        }
    });

    3. await 帶來的神坑

    工具準(zhǔn)備好了,代碼也大刀闊斧地進(jìn)行了改造,看起來舒服多了,一運(yùn)行卻報(bào)錯!為什么???

    先來看一段原來的代碼,是這樣的

    wx.getStorage({
        key: "blabla",
        success: res => {
            // do with res
        }
    });

    改造之后是這樣

    const res = await awx.getStorage({ key: "blabla" });  // <== runtime error
    // do with res

    awx.getStorage 拋了個異常,原因是叫 "blabal" 的這個數(shù)據(jù)不存在。

    為什么原來沒有錯,現(xiàn)在卻報(bào)錯?

    因?yàn)樵瓉頉]有定義 fail 回調(diào),所以錯誤被忽略了。但是 promisify() 把 fail 回調(diào)封裝成了 reject(),所以 awx.getStorage() 返回的 Promise 對象上,需要通過 catch() 來處理。我們沒有直接使用 Promise 對象,而是用的 await 語法,所以 reject() 會以拋出異常的形式體現(xiàn)出來。

    用人話說,代碼得這樣改:

    try {
        const res = await awx.getStorage({ key: "blabla" });  // <== runtime error
        // do with res
    } catch (err) {
        // 我知道有錯,就是當(dāng)它不存在!
    }

    傷心了不是?如果沒有傷心,你想想,每一個調(diào)用都要用 try ... catch ... 代碼塊,還能不傷心嗎?

    3.1. 忽略不需要處理的錯誤

    處理錯誤真的是個好習(xí)慣,但真的不是所有錯誤情況都需要處理。其實(shí)要忽略錯誤也很簡單,直接在每個 Promise 形式的異步調(diào)后面加句話就行,比如

    const res = await awx
        .getStorage({ key: "blabla" })
        .catch(() => {});
    //  ^^^^^^^^^^^^^^^^ 捕捉錯誤,但什么也不干

    稍微解釋一下,在這里 awx.getStorage() 返回一個 Promise 對象,對該對象調(diào)用 .catch() 會封裝 reject 的情況,同時它會返回一個新的 Promise 對象,這個對象才是 await 等待的 Promise。

    不過感覺 .catch(() => {}) 寫起來怪怪的,那就封裝成一個方法吧,這得改 Promise 類的原形

    Promise.prototype.ignoreError = function() {
        return this.catch(() => { });
    };

    這段代碼放在定義 toAsync() 之前就好。

    用起來也像那么回事

    const res = await awx
        .getStorage({ key: "blabla" })
        .ignoreError();

    對于單個 await 異步調(diào)用,如果不想寫 try ... catch ... 塊,還可以自己定義一個 ifError(fn) 來處理錯誤的情況。但是如果需要批量處理錯誤,還是 try ... catch ... 用起順手:

    4. 回到開始

    try {
        const storeValue = await awx.getStorage({});
        const settings = await awx.getSetting();
        const { code } = await awx.login();
        const userInfo = await awx.getUserInfo({ code });
    } catch (err) {
        // 處理錯誤吧
    }

    看,不需要對每個異步調(diào)用定義?fail?回調(diào),一個?try ... catch ...?處理所有可能產(chǎn)生的錯誤,這可不也是 async/await 的優(yōu)勢!

    推薦教程: 《微信小程序

    以上がWeChat 開発での async/await の使用の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xianyu WeChat ミニプログラムが正式に開始 Xianyu WeChat ミニプログラムが正式に開始 Feb 10, 2024 pm 10:39 PM

Xianyu の公式 WeChat ミニ プログラムが靜かに開始されました。ミニ プログラムでは、プライベート メッセージを投稿して購入者/販売者とコミュニケーションしたり、個人情報(bào)や注文を表示したり、商品を検索したりすることができます。プログラム、見てみましょう。 Xianyu WeChat アプレットの名前は何ですか? 回答: Xianyu、アイドル取引、中古品販売、評価、リサイクル。 1. ミニ プログラムでは、アイドル メッセージの投稿、プライベート メッセージを介した購入者/販売者とのコミュニケーション、個人情報(bào)と注文の表示、指定された商品の検索などができます。 2. ミニ プログラム ページには、ホームページ、近くに、アイドル投稿、メッセージ投稿、私の投稿 5つの機(jī)能; 3. 使用したい場合は、購入する前に WeChat 支払いを有効にする必要があります。

WeChat ミニ プログラムに畫像フィルター効果を?qū)g裝する WeChat ミニ プログラムに畫像フィルター効果を?qū)g裝する Nov 21, 2023 pm 06:22 PM

WeChat ミニ プログラムでの畫像フィルター効果の実裝 ソーシャル メディア アプリケーションの人気に伴い、人々は寫真にフィルター効果を適用して、寫真の蕓術(shù)的効果や魅力を高めることがますます好まれています。畫像フィルター効果は WeChat ミニ プログラムにも実裝でき、より興味深く創(chuàng)造的な寫真編集機(jī)能をユーザーに提供します。この記事では、WeChat ミニ プログラムに畫像フィルター効果を?qū)g裝する方法を紹介し、具體的なコード例を示します。まず、WeChat アプレットのキャンバス コンポーネントを使用して畫像を読み込み、編集する必要があります。 Canvasコンポーネントはページ上で使用できます

WeChat アプレットにドロップダウン メニュー効果を?qū)g裝する WeChat アプレットにドロップダウン メニュー効果を?qū)g裝する Nov 21, 2023 pm 03:03 PM

WeChat ミニ プログラムでドロップダウン メニュー効果を?qū)g裝するには、特定のコード サンプルが必要です。モバイル インターネットの普及に伴い、WeChat ミニ プログラムはインターネット開発の重要な部分となり、ますます多くの人が注目し始めています。 WeChat ミニ プログラムを使用します。 WeChat ミニ プログラムの開発は、従來の APP 開発よりも簡単かつ迅速ですが、特定の開発スキルを習(xí)得する必要もあります。 WeChat ミニ プログラムの開発では、ドロップダウン メニューが一般的な UI コンポーネントであり、より良いユーザー エクスペリエンスを?qū)g現(xiàn)します。この記事では、WeChat アプレットにドロップダウン メニュー効果を?qū)g裝し、実用的な機(jī)能を提供する方法を詳しく紹介します。

Xianyu WeChat アプレットの名前は何ですか? Xianyu WeChat アプレットの名前は何ですか? Feb 27, 2024 pm 01:11 PM

Xianyu の公式 WeChat ミニ プログラムが靜かに開始され、アイドルアイテムを簡単に公開および交換できる便利なプラットフォームをユーザーに提供します。ミニ プログラムでは、プライベート メッセージを介して購入者または販売者とコミュニケーションしたり、個人情報(bào)や注文を表示したり、欲しい商品を検索したりできます。では、WeChat ミニ プログラムでは Xianyu とはいったい何と呼ばれているのでしょうか? このチュートリアル ガイドで詳しくご紹介しますので、知りたいユーザーは、この記事に従って読み続けてください。 Xianyu WeChat アプレットの名前は何ですか? 回答: Xianyu、アイドル取引、中古品販売、評価、リサイクル。 1. ミニ プログラムでは、アイドル メッセージの投稿、プライベート メッセージを介した購入者/販売者とのコミュニケーション、個人情報(bào)と注文の表示、指定された商品の検索などができます。 2. ミニ プログラム ページには、ホームページ、近くに、アイドル投稿、メッセージ投稿、マイ投稿の5つの機(jī)能、3.

WeChatアプレットは畫像アップロード機(jī)能を?qū)g裝 WeChatアプレットは畫像アップロード機(jī)能を?qū)g裝 Nov 21, 2023 am 09:08 AM

WeChat アプレットが畫像アップロード機(jī)能を?qū)g裝 モバイル インターネットの発展に伴い、WeChat アプレットは人々の生活に欠かせないものになりました。 WeChat ミニ プログラムは、豊富なアプリケーション シナリオを提供するだけでなく、畫像アップロード機(jī)能などの開発者定義の機(jī)能もサポートします。この記事では、WeChat アプレットに畫像アップロード機(jī)能を?qū)g裝する方法と具體的なコード例を紹介します。 1. 準(zhǔn)備作業(yè) コードを書き始める前に、WeChat 開発者ツールをダウンロードしてインストールし、WeChat 開発者として登録する必要があります。同時に、WeChat についても理解する必要があります。

WeChat アプレットに畫像回転効果を?qū)g裝する WeChat アプレットに畫像回転効果を?qū)g裝する Nov 21, 2023 am 08:26 AM

WeChat ミニ プログラムで畫像回転効果を?qū)g裝するには、特定のコード サンプルが必要です。WeChat ミニ プログラムは、ユーザーに豊富な機(jī)能と優(yōu)れたユーザー エクスペリエンスを提供する軽量のアプリケーションです。ミニ プログラムでは、開発者はさまざまなコンポーネントと API を使用して、さまざまな効果を?qū)g現(xiàn)できます。その中で、畫像回転効果は、ミニプログラムに興味と視覚効果を加えることができる一般的なアニメーション効果です。 WeChat ミニ プログラムで畫像の回転効果を?qū)g現(xiàn)するには、ミニ プログラムが提供するアニメーション API を使用する必要があります。以下は、その方法を示す具體的なコード例です。

WeChat アプレットを使用してカルーセル切り替え効果を?qū)g現(xiàn)する WeChat アプレットを使用してカルーセル切り替え効果を?qū)g現(xiàn)する Nov 21, 2023 pm 05:59 PM

WeChat アプレットを使用してカルーセル スイッチング効果を?qū)g現(xiàn)する WeChat アプレットは、シンプルで効率的な開発と使用特性を備えた軽量のアプリケーションです。 WeChat ミニ プログラムでは、カルーセル スイッチング効果を?qū)g現(xiàn)することが一般的な要件です。この記事では、WeChat アプレットを使用してカルーセル切り替え効果を?qū)g現(xiàn)する方法と、具體的なコード例を紹介します。まず、カルーセル コンポーネントを WeChat アプレットのページ ファイルに追加します。たとえば、&lt;swiper&gt; タグを使用すると、カルーセルの切り替え効果を?qū)g現(xiàn)できます。このコンポーネントでは、 b を渡すことができます。

WeChatミニプログラムにスライディング削除機(jī)能を?qū)g裝する WeChatミニプログラムにスライディング削除機(jī)能を?qū)g裝する Nov 21, 2023 pm 06:22 PM

WeChat ミニ プログラムにスライディング削除機(jī)能を?qū)g裝するには、特定のコード サンプルが必要です。WeChat ミニ プログラムの人気に伴い、開発者は開発プロセス中にいくつかの一般的な機(jī)能を?qū)g裝する際に問題に遭遇することがよくあります。中でも、スライド削除機(jī)能は、よく使われる一般的な機(jī)能要件です。この記事では、WeChat アプレットにスライディング削除機(jī)能を?qū)g裝する方法と具體的なコード例を詳しく紹介します。 1. 要件分析 WeChat ミニ プログラムでは、スライド削除機(jī)能の実裝には次の點(diǎn)が含まれます。 リスト表示: スライドして削除できるリストを表示するには、各リスト項(xiàng)目に次の要素が含まれている必要があります。

See all articles