【问题标题】:How can I call javascript function with thread or task?如何使用线程或任务调用 javascript 函数?
【发布时间】:2019-05-23 10:50:35
【问题描述】:

我已经在下面尝试了以下代码

.cs

    string someone = "John";
    int timer = 3000;
    int check = 1;
    string script = "<script> runPromise('" + someone + "'," + timer + "," + check + ").then(someone => { console.log('" + someone + "', someone)});</script>";
    ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", script);

.aspx

<script>
    let runPromise = (someone, timer, check, success = true) => {
        console.log(`${someone} start run`);
        console.log(check);
      return new Promise((resolve, reject) => {
        if (check == 1) {
          setTimeout(function () {
            resolve(`${someone} run ${timer / 1000} second`);
          }, timer);
        } else {
          reject(`${someone} fail`)
        }
      });
    }
</script>

此代码只能在按钮中使用。

当我想等待大约 10 秒时,如何在线程或任务中使用它?

我们将不胜感激。

【问题讨论】:

  • 你能澄清一下你的问题吗?只是您缺少的时间间隔吗? (所以不是 3 秒,而是 10 秒?)
  • 请说明您要解决的问题。
  • 我想用线程或任务调用javascript函数

标签: javascript c# asp.net webforms


【解决方案1】:

您可以尝试使用setTimeout 调用承诺

已编辑

string someone = "John";
int timer = 10000;
int check = 1;
string script = "<script> setTimeout(() => someFunction(('" + someone + "'," + timer + "," + check + ").then(value => {console.log(value);}), " + timer + ");</script>";
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", script);

var someFunction = (someone, timer, check) => {
  console.log(`${someone} start run`);
  console.log(check);

  return new Promise((resolve, reject) => {
    if (check == 1) {
      resolve(`${someone} run ${timer / 1000} second`);
    } else {
      reject(Error("It broke"));
    }
  });
};

示例:

var someFunction = (someone, timer, check) => {
  console.log(`${someone} start run`);
  console.log(check);
  
  return new Promise((resolve, reject) => {
    if (check == 1) {
      resolve(`${someone} run ${timer / 1000} second`);
    } else {
      reject(Error("It broke"));
    }
  });
};

setTimeout(() => someFunction(`someone`, 10000,1).then(value => {
console.log(value);
}), 10000);

【讨论】:

  • 我有一些变量需要从 .cs 中收集,所以我不能使用这个答案。谢谢
  • @KevinLee 当然你可以使用这个答案,你只需要将变量传递给 setTimeout 函数而不是值
  • 但是我不知道如何在线程中传递变量,你能告诉我吗?
  • @KevinLee 您是否尝试过编辑后的答案?我已经添加了您在 aspx 上调用的脚本
  • @KevinLee 我相信如果你有 script setTimeout 到你的 aspxsomeFunction 到你的 js 文件它会工作。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2011-10-28
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多