【发布时间】:2017-10-19 08:31:21
【问题描述】:
我有一个共享点表单,用户可以在其中填写一些文本框。
用户单击保存按钮。脚本从这里运行。
检查是否所有的texbox都被填满了。
如果不错,则根据输入从外部列表中获取一些字段,并根据该输入更新其他一些列表。
将输入保存为新项目。
问题:我使用了一个名为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 的信息,我想我了解它们的工作原理,但在我的情况下,PreSaveAction() 具有多种功能(检测 onclick、做我的工作、返回 true/false)。我尝试了几种方法,但我找不到解决方案在哪里以及如何从 presave 放置返回以等待我的承诺完成?还是我应该使用完全不同的方法?非常感谢您的热心帮助!
【问题讨论】:
-
如果没有看到函数中的实际异步代码,人们将无法帮助您。您似乎正在尝试从函数返回异步检索的值。你不能这样做。该值在函数返回时不可用。异步回调将在以后调用。
-
我简化了代码并试图专注于问题,因为我不想用冗长且难以理解的代码惹恼人们。但看起来你明白我的问题了。那么这是不可能的吗?你会用什么其他类型的解决方案来存档类似的东西?我的问题是这个“Presaveaction”是一个集成功能,我不知道如何将它拆分为组件。例如:如果我要使用简单的 onlcick 事件,在下一个函数中进行检查、更新列表,并在 3. 函数中强制保存,它会起作用吗?
-
Stackoverflow 不能很好地处理理论问题。它适用于实际代码和非常具体的问题。您问题的操作部分都在您的异步代码中,您没有共享任何代码,因此您的问题几乎完全是理论上的。鉴于此,我能提供的最佳答案是How do I return the response from an asynchronous call。
标签: javascript jquery promise save