setInterval如何在结束后返回执行结果?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setInterval如何在结束后返回执行结果?相关的知识,希望对你有一定的参考价值。
setInterval应该是另起线程了,不等执行完就会直接执行下面的return,返回的b直接是1,怎么做到返回b的执行完后结果3呢?
① 在javascript中,setInterval,setTimeout函数都是分线程启动运行的;
②
window.onload=function()
s(function(k)
alert(k);
);
function s(f)
var b=1;
var a=setInterval(function()
console.log("b的值"+b);
if(b==3)
console.log("结束计时器");
clearInterval(a);
f("获取到最终结果"+b);
b++;
,2000);
使用在类中定义的有返回值的函数,如何得到执行结果反馈?
我们做开发时,程序执行完后最好会有个反馈结果,尤其是在庞大的程序中,如果有bug可以及时发现,不然很浪费时间...最近做sde的二次开发,创建数据集时要用到带有返回值的函数,因为在数据集上创建要素类需要用到这个数据集,声明一个全局变量,可以直接用这个返回值.但是在捕获错误方面受到了限制,因为有返回值的函数每一个节点都要有返回值,想直接得到反馈是不行的,想在方法执行后写结果反馈的代码是检测不到的.
只能向师傅求救,给我提供了两种方法解决,感觉很巧妙.
原来的代码:
Form1中的代码:
private void 创建数据集ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
IWorkspace2 workspace = (IWorkspace2)Cls_SDE.OpenSde();
string strDatasetName = txtFileName.Text;
if (strDatasetName == "")
{
MessageBox.Show("请输入要创建的数据集名称!", "错误提示");
return;
}
ISpatialReferenceFactory pSpatialReferenceFac = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatialReference = pSpatialReferenceFac.CreateProjectedCoordinateSystem
((int)esriSRProjCS4Type.esriSRProjCS_Beijing1954_3_Degree_GK_CM_120E);
gSdeFeatDs = Cls_SDE.CreateFeatureDataset(workspace, strDatasetName, pSpatialReference);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
调用的类中的方法:
public static IFeatureDataset CreateFeatureDataset(IWorkspace2 workspace, string strDatasetName, ISpatialReference spatialReference)
{
try
{
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
if (featureWorkspace == null)
{
return null;
}
if (isDatasetExist(workspace, strDatasetName))
{
return featureWorkspace.CreateFeatureDataset(strDatasetName, spatialReference);
//MessageBox.Show("创建数据集成功!"); //因为已经有返回值了,此处的代码是检测不到的
}
else
{
MessageBox.Show("创建数据集失败!!!");
return null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
}
第一种方法:
在方法中声明一个IFeatureDataset类型的变量,比如:IFeatureDataset ss;把执行函数中的return删除,将执行结果赋值给ss,加上反馈,在if函数外面return ss
修改后是这样:
第二种方法就是在Form1中下功夫,原来的代码不变,在Form1中的函数中加一句if语句判断执行后的结果是否为null,很简单啊,为什么我想不到呢?
以上是关于setInterval如何在结束后返回执行结果?的主要内容,如果未能解决你的问题,请参考以下文章