嘿伙计们就是这种情况
function makeIt()
{
//code
createSomething()
}
function createSomething(){
//code
request.execute(function(resp) {
function writeSomething(){
//code
}
createSomething()
goback()
}
}
我想在writesomething
完成后执行goback。
问题是writesomething
功能可以在2秒或10秒内完成(取决于文件)。我现在使用setTimeout只是为了确定。
但是,当写完这些东西时,我怎么能让goback exucute?
编辑:
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));
}
答案 0 :(得分:3)
请参阅底部的更新,现在您已包含writeToSheet
定义。
如果writeSomething
是异步进程,它将为您提供一种方法,让您知道它何时完成 - 它将接受回调,返回承诺等。传递{{ 1}}作为回调(或作为承诺上的goback
回调等)。
示例 - 如果 then
接受回调:
writeSomething
或
writeSomething(other, arguments, here, goback);
// This is the callback ---------------^^^^^^
...取决于您是否希望writeSomething(other, arguments, here, function() {
goback();
});
接收goback
通过其回调的任何参数。
示例 - 如果 writeSomething
返回承诺:
writeSomething
或
writeSomething(other, arguments, here).then(goback);
...再次取决于您是否希望writeSomething(other, arguments, here).then(function() {
goback();
});
接收传递给goback
回调的值。
如果then
是同步进程可能需要2-10秒,请在致电writeSomething
后致电goback()
。即使writeSomething
需要10秒钟,如果它真正同步,writeSomething
也不会被调用,直到它完成。
示例(仅为完整性:-)):
goback
更新:您的writeSomething(other, arguments, here);
goback();
函数启动异步进程,因此我们要将其编辑为接受回调或返回承诺。
接受回电:
writeToSheet
如果成功, 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
然后:
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);
。
答案 1 :(得分:0)
将您的回调函数作为参数传递
function writeSomething(callback) {
...
callback();
}
function myCallbackFunction() {
alert('hi!');
}
writeSomething(myCallbackFunction);