0

私は、人々がサインアップできるこれらの「イベント」を投稿する WIX Web サイトに取り組んでいます。イベントが終了したときに、これらのイベントがフロントエンドから隠されるようにしています。show 値が true かどうかをリピーターがチェックする「show」ブール値を作成しました。私がやろうとしているのは、イベントが終了した場合に "show" 値を false にすることです。

誰かがページにアクセスするたびにメソッドを呼び出して、今日の日付よりも古いアイテムをデータベースに照会し、それらのアイテムの「表示」値を false に設定することで、これを機能させました。問題は、ページの読み込みに時間がかかることです。私がやりたいのは、cron サービスを使用して 1 日に数回メソッドを呼び出すことです。これを行う唯一の方法は、wix-http 関数を使用してメソッドを呼び出すことです。これまでの私のコードは次のとおりです。

import wixData from 'wix-data';
import {ok} from 'wix-http-functions';

export function use_eventExpire() {
    var today = new Date();     //Gets todays date
    return wixData.query("Events")  //Begins Query of "Events" Database
        .le("endTime", today)   //Looks for items that are older than 
//today's date
        .eq("show", true)       //Looks for items that have the "show" 
//value as true
        .find()                 //Ends query
        .then((results) => {    //Gets Results
            let numberOfItems = results.length;     //Gets Number 
//of Items from Query
            var i = 0;                              //Declares iterator
            for (; i < numberOfItems; i++) {  //Loops through all items
                let items = results.items[i]; //Loops through all items
                items.show = false; //Sets items "show" value to false
                wixData.update("Events", items)     //Updates Database
                    .then((results) => {            //If successful
                        console.log("Successfull: " + results);     //Logs Results
                    }).catch((err) => {             //If unsuccessful
                        console.log("There was an Error: " + err);  
//Logs Error
                    });
        }
    });
}

リンクに移動すると、OK が返されますが、何も呼び出されず、データベースが更新されません。何を変更する必要がありますか?

4

1 に答える 1

0

promise と return ステートメントの使用には問題があります。配列を繰り返し処理できるように、(たとえば) bluebird を含める必要があります。 http://bluebirdjs.com/docs/getting-started.html

// make sure you include bluebird - not sure if you are working client side or server side

function updateEvent(item) {
    item.show = false;
    return wixData.update("Events", items);
}

export function use_eventExpire() {
    var today = new Date(); //Gets todays date
    Promise.resolve().then(() => {
        return wixData.query("Events") //Begins Query of "Events" Database
            .le("endTime", today) //Looks for items that are older than today's date
            .eq("show", true) //Looks for items that have the "show" value as true
            .find(); //Ends query
    }).then((results) => { //Gets Results
        return Promise.map(results, updateEvent);
    }).catch((err) => {
        console.log(err);
    }).finally(() => {
        console.log("all finished");
    });
}
于 2018-02-27T17:42:39.200 に答える