データを保存する手段として localforage を使用しようとしていますが、同じコードを書き直してデータの大きな配列を保存およびロードしたくないので、上記の関数を含むプロトタイプでオブジェクトを作成することにしました。1 つは setItem に、もう 1 つは getItem に。最初に localforage を構成し、次に関数を定義してから、そのプロトタイプを定義します。
これをプロトタイプで実行しようとすると、setArray で this.forageName が未定義になります。定義されていないのはなぜですか? どうすれば認識できるようになりますか?
this.forageName が呼び出されたときにプロトタイプが認識し、インスタンス化されたオブジェクトによって呼び出され、「this」を使用してインスタンス化されたオブジェクトを参照するようにします。
localforage.config({
description: 'Storage medium for caching 2d arrays.'
});
/**
* This function is based on Localforage which uses a promise/callback API.
* Promise chains make sure that all values are returned before moving onto the next step.
*
* ForageStorage parses through a 2d array and uses localforage to store each array in key-value pairs,
* where the first item in each sub-array is the key and the entire sub-array is the value.
* @namespace ForageStorage
* @param {string} forageName - The name of the localforage object that this object will instantiate.
* @param {array[]} arrayToStore - The array of arrays to parse through and store.
*/
function ForageStorage(forageName, arrayToStore){
this.forageName = localforage.createInstance({name: forageName});
this.arrayToStore = arrayToStore;
this.retrievedArray = [];
this.promiseArray = [];
};
ForageStorage.prototype = {
setArray: function (){
this.promiseArray = this.arrayToStore.map(function (item) { return this.forageName.setItem(item[0].toString(), item)});
return Promise.all(promiseArray);
},
getArray: function () {
this.forageName.keys()
.then(function (keys) {
this.retrievedArray = keys.map(function (item) {return this.forageName.getItem(item)})
})
return Promise.all(retrievedArray);
},
};
var forageStorage = new ForageStorage("myStorage",textData);
forageStorage.setArray()
.then(forageStorage.getArray())
.then(console.log(param.map(function () { return item.toString(); })));