2017-10-19 9 views
0
  1. 私は、ユーザーがテキストボックスを入力する共有フォームを持っています。約束を正しく使うには?

  2. 保存ボタンをユーザーがクリック。スクリプトはここから実行されます。

  3. をすべてチェックtexboxが満たされているかどうか。

  4. 良い場合は、入力に基づいて外側のリストからいくつかのフィールドを取得し、それに基づいて他のリストを更新してください。

  5. は新しい項目として入力を保存します。

問題:私はPreSaveAction()という名前の関数を使用します。これは、ユーザーが「保存」ボタンをクリックしたときに呼び出され、trueフォームが返される場合にのみ呼び出されます。だからtrueと返す前に私はフィールドのチェックとリストの更新を行う必要があります、私はこれを追加する場所を知らないreturn true。これを直接PreSaveAction()の内部に追加すると、asyncronが実行されているため、更新が行われる前に30〜40%のチャンスが返されます。私は少し助けが必要なので、私はjavascriptに新しいです。

私の簡素化のコードは次のようになります。

function PreSaveAction() //This start if the user click on the save button, and create a new item if return with true 
{ 
    var promresult; 
    if(textbox!="") 
    { 
    //do my staff based on promise like: promresult=promise.then(input textbox, get list field).then(update).then(resolve true, fail false) 
    return promresult; //this run before the update is completed and promresult get value 
    } 
    else 
    { 
    return false; //nothing happens if the textboxes are not filled yet. 
    } 

} 

私はおよそpromisesをよく読んで返す、私の詰め込むを行い、onclickの検出私は、彼らがどのように動作するかunderstandedと思いますが、私の場合でPreSaveAction()は、(複数の機能を持っています正誤)。私はいくつかのアプローチを試しましたが、解決策を見つけることができませんでした。あるいは、私は完全に異なるアプローチを使用すべきですか?あなたの親切な助けをありがとう!

+0

実際の非同期コードが表示されなくても、人々はあなたを助けられません。関数から非同期に取得された値を返そうとしているようです。それをしてはいけない。この値は、関数が返った時点では使用できません。非同期コールバックは、後で呼び出されます。 – jfriend00

+0

私はコードを単純化し、プロブラムに集中しようとしました。なぜなら、長い間、そして理解しにくいコードでpplを嫌うことはなかったからです。しかし、あなたは私の問題の考えを持っているように見えます。これは不可能ですか?同様のアーカイブには他にどのようなソリューションがありますか?私の問題は、この "Presaveaction"は統合された関数であり、コンポーネントに分割する方法はわかりません。たとえば、単純なonlcickイベントを使用する場合は、チェックを行い、次の関数でリストを更新し、3つの関数で保存を強制します。 – Nefri

+0

理論的な質問では、Stackoverflowはうまく機能しません。それは実際のコードと非常に特定の問題でより良く機能します。あなたの質問の操作部分はすべてあなたの非同期コードに入っていますが、あなたが共有しているものはありませんので、あなたの質問はほぼ完全に理論的です。それで、私が提供できる最良の答えは、[非同期呼び出しからの応答を返すにはどうすればいいですか]です(https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from -an-asynchronous-call/14220323#14220323)。 – jfriend00

答えて

0
function PreSaveAction() //This start if the user click on the save button, and create a new item if return with true 
{ 
    var promresult; 
    if(textbox!="") 
    { 
    //do my staff based on promise like: promresult=promise.then(input textbox, get list field).then(update).then(resolve true, fail false) 
    return promresult; //this run before the update is completed and promresult get value 
    } 
    else 
    { 
    return Promise.resolve(false); //nothing happens if the textboxes are not filled yet. 
    } 

} 

PreSaveAction() 
    .then(function(result){ 
    if (result===false) { 
     // this means the textboxes are not filled yet 
    } else { 
     // result is whatever is returned from promresult 
    } 
    }) 
+0

こんにちは!私はそれをテストし、Presaveaction()のように見える。then()構造体は動作しない。あなたはこれがこのような約束と互換性があるのでしょうか?あるいは、私は何か間違ったことをしているかもしれませんが、「SyntaxError:予期しないトークンです。この行から: – Nefri

+0

おそらく 'promresult'は約束ではありませんあなたは実際のpromresultコードを投稿していないので、私はそれが何であるか本当に分かりません。 – TKoL