gpt4 book ai didi

javascript - 函数完成后触发

转载 作者:行者123 更新时间:2023-11-28 18:01:50 25 4
gpt4 key购买 nike

嘿伙计们,情况是这样的

function makeIt()
{
//code
createSomething()
}

function createSomething(){
//code
request.execute(function(resp) {
function writeSomething(){
//code
}
createSomething()
goback()
}
}

我想在writesomething完成后执行goback。问题是 writesomething 函数可以在 2 秒或 10 秒内完成(取决于文件)。我现在使用 setTimeout 只是为了确定。但是当 writesomething 完成后我怎样才能让 goback 执行呢?

编辑:

function writeToSheet(){
//this is a part of the function (deleted some information)
params

var xhr = new XMLHttpRequest();

xhr.open('PUT', 'https://something.com');
xhr.setRequestHeader(some things);
xhr.send(JSON.stringify(params));
}

最佳答案

既然您已经包含了 writeToSheet 定义,请参阅底部的更新。

<小时/>

如果 writeSomething 是一个异步流程,它将提供一种方式让您知道它何时完成 - 它将接受回调、返回 promise 等。将 goback 作为该回调传递(或作为 Promise 上的 then 回调等)。

示例 - 如果 writeSomething 接受回调:

writeSomething(other, arguments, here, goback);
// This is the callback ---------------^^^^^^

writeSomething(other, arguments, here, function() {
goback();
});

...取决于您是否希望 goback 接收 writeSomething 传递其回调的任何参数。

示例 - if writeSomething 返回一个 promise :

writeSomething(other, arguments, here).then(goback);

writeSomething(other, arguments, here).then(function() {
goback();
});

...再次取决于您是否希望 goback 接收传递给 then 回调的值。

<小时/>

如果 writeSomething 是一个同步过程,可能需要 2-10 秒,只需在调用 writeSomething< 后调用 goback()/。即使 writeSomething 需要 10 秒,如果它是真正同步的,在完成之前也不会调用 goback

示例(只是为了完整性:-)):

writeSomething(other, arguments, here);
goback();
<小时/>

更新:您的 writeToSheet 函数启动一个异步进程,因此我们要对其进行编辑以接受回调或返回 promise 。

接受回调:

function writeToSheet(callback){
// ^------------------------------------ ***
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() { // ***
if (xhr.readyState === 4) { // ***
callback(xhr.status === 200); // ***
} // ***
};
xhr.open('PUT', 'https://something.com');
xhr.setRequestHeader(some things);
xhr.send(JSON.stringify(params));
}

writeToSheet 如果成功,将使用 true 调用回调,如果失败,则使用 false 调用回调。

然后:

writeToSheet(goback);

writeToSheet(function(flag) {
// Maybe use the flag here, or not, depends on what you want
goback();
});

...如果您不希望goback接收该标志。

返回 promise :

function writeToSheet(){
return new Promise(function(resolve, reject) { // ***
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() { // ***
if (xhr.readyState === 4) { // ***
if (xhr.status === 200) { // ***
resolve(); // ***
} else { // ***
reject(); // ***
} // ***
} // ***
};
xhr.open('PUT', 'https://something.com');
xhr.setRequestHeader(some things);
xhr.send(JSON.stringify(params));
});
}

然后:

writeToSheet().then(goback).catch(function() {
// It failed
});

...只会在成功时调用 goback 并在失败时调用其他函数,或者

writeToSheet().then(goback, goback);

...无论如何都会调用goback

关于javascript - 函数完成后触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43408580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com