2017-12-22 6 views
0

私が実装したいのは、getterメソッドが非同期であるデータベースからデータを取得し、次に約束された戻り値に基づいてconst変数をエクスポートすることです。TypeScript約束の中でconstをエクスポートする方法

Modifiers cannot appear here 

enter image description here なぜそれが起こる可能性:?しかし、私はエラーメッセージが表示されます

import {Storage} from "@ionic/storage"; 
//... 
storage.get("setup_done").then((val)=>{ 
    export const FirstRunPage = val?'valueA':'valueB'; 
}) 

コードは次のようですか

+2

しかし、なぜですか?なぜ、別のモジュールでリクエストを行い、そこで使うのですか? 「後で輸出する」ことは不可能です。モジュールが評価され、モジュールのエクスポートが別のモジュールにロードされます。今待っている。 – Li357

+1

これは、そこに何かを動的にエクスポートする意味がありません。いったん使用可能なものがあれば、内部プロパティの1つを変更するオブジェクトをエクスポートしたり、値を返すPromiseをエクスポートしたりすることができます。 – zeh

答えて

1

すべてのエクスポートがトップレベルに表示されている必要があります。あなたが望むように、何らかの非同期エクスポートを行う方法はありません。

私はそれを見る方法には2つの選択肢があります。モジュールの消費者はただ、他の約束と同じように、.thenを使用して値にアクセスしなければならないことを意味

import {Storage} from "@ionic/storage"; 
//... 
export const FirstRunPagePromise = storage.get("setup_done").then((val)=>{ 
    return val ? 'valueA' : 'valueB'; 
}) 

:最初に、そしておそらく最も簡単な、ちょうど約束自体をエクスポートすることです。

あなたの2番目のオプションは、それが解決され、変数に値を代入し、その変数のgetter関数をエクスポートすることです:

import {Storage} from "@ionic/storage"; 
//... 
let FirstRunPage: string; 

storage.get("setup_done").then((val)=>{ 
    FirstRunPage = val ? 'valueA' : 'valueB'; 
}); 

export function getFirstRunPage() { 
    return FirstRunPage; 
} 

あなたは変数自体をインポートすると、あなたを与えるためにゲッターを使用する必要があります約束が解決したときに更新されないコピー。

このアプローチでは、あまりにも早い時期にアクセスすると、でもの値に同期してアクセスできます。これはundefinedになります。だからあなたのコードはすべて、値が最初に存在するかどうかを確認してから使用しなければなりません。つまり、コードにアクセスするコードは、約束が解決された後にのみ実行されるということを開発者として知る必要があります。

個人的に私はオプション1をお勧めしますが、私は前に両方を行っており、最終的には使用例にもよります。あなたの状況に合ったことをしてください。

関連する問題