如果另一个函数需要更多时间,我如何在另一个函数完成后调用一个函数?
How can i call a function after completion of another function if the another function takes more time?
我正在尝试在 javascript 中应用回调,这是一个示例代码,类似于我在 node.js
中内置的网站中的一段代码
var a = function(obj,callback){
var p = {name: 'name', age: 35}
obj.p = p
setTimeout(function(){
console.log("waiting for three seconds");
}, 3000);
console.log("...................")
callback(obj)
}
var b = function(obj){
var q = {name: 'name2', age: 37}
obj.q = q
console.log("*******************")
}
var func = function(){
var obj = {};
a(obj,b)
console.log(obj)
}
func()
在 运行 上我得到了这段代码的输出:-
...................
*******************
{ p: { name: 'name', age: 35 }, q: { name: 'name2', age: 37 } }
waiting for three seconds
现在在这里,在函数“a”中,“等待三秒”行在 3 秒后打印出来,此时回调函数也被调用,因此“等待三秒”行打印在函数“b”的输出即是“******************”
但是我希望输出是这样的
waiting for three seconds
...................
*******************
{ p: { name: 'name', age: 35 }, q: { name: 'name2', age: 37 } }
我怎样才能做到这一点?请帮助我被困在这里。
你可以使用 JavaScript promises 来实现同步。像下面这样更改您的代码。
我们已经完成了 promise 中的所有异步操作。 await 将暂停执行,直到承诺得到解决。
var a = async function(obj) {
var p = {name: 'name', age: 35}
obj.p = p
await timeout( 3000)
console.log("...................")
b(obj)
}
var b = function(obj) {
var q = {name: 'name2', age: 37}
obj.q = q
console.log("*******************")
}
function timeout(ms) {
return new Promise(resolve =>
setTimeout(function(){
console.log("waiting for three
seconds");
resolve()
}, ms));
}
var func = async function(){
var obj = {};
await a(obj,b)
console.log(obj)
}
func()
我正在尝试在 javascript 中应用回调,这是一个示例代码,类似于我在 node.js
中内置的网站中的一段代码var a = function(obj,callback){
var p = {name: 'name', age: 35}
obj.p = p
setTimeout(function(){
console.log("waiting for three seconds");
}, 3000);
console.log("...................")
callback(obj)
}
var b = function(obj){
var q = {name: 'name2', age: 37}
obj.q = q
console.log("*******************")
}
var func = function(){
var obj = {};
a(obj,b)
console.log(obj)
}
func()
在 运行 上我得到了这段代码的输出:-
...................
*******************
{ p: { name: 'name', age: 35 }, q: { name: 'name2', age: 37 } }
waiting for three seconds
现在在这里,在函数“a”中,“等待三秒”行在 3 秒后打印出来,此时回调函数也被调用,因此“等待三秒”行打印在函数“b”的输出即是“******************”
但是我希望输出是这样的
waiting for three seconds
...................
*******************
{ p: { name: 'name', age: 35 }, q: { name: 'name2', age: 37 } }
我怎样才能做到这一点?请帮助我被困在这里。
你可以使用 JavaScript promises 来实现同步。像下面这样更改您的代码。
我们已经完成了 promise 中的所有异步操作。 await 将暂停执行,直到承诺得到解决。
var a = async function(obj) {
var p = {name: 'name', age: 35}
obj.p = p
await timeout( 3000)
console.log("...................")
b(obj)
}
var b = function(obj) {
var q = {name: 'name2', age: 37}
obj.q = q
console.log("*******************")
}
function timeout(ms) {
return new Promise(resolve =>
setTimeout(function(){
console.log("waiting for three
seconds");
resolve()
}, ms));
}
var func = async function(){
var obj = {};
await a(obj,b)
console.log(obj)
}
func()