传递其余代码作为回调函数

时间:2017-10-10 06:22:32

标签: javascript

在已经完成的javascript函数的中间,你想调用一个新的异步函数。因此,您需要将“其余代码”作为回调函数传递给此新函数。

function sample() {
    alert("a bunch of codes");

    alert("another a bunch of codes");
}

我必须更改以下功能。

function sample() {
    alert("a bunch of codes");

    var cb = function () {
        alert("another a bunch of codes");
    };

    newFunction(cb);
}

如果我想添加另一个必须先等待的功能怎么办?然后我得到了许多级别的回调函数来等待另一个..

那么ES5的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

在ES5中,就像你说的那样,你必须在彼此内部嵌套多个回调。

示例:

function myFunction2(){
    console.log(2);

  let myFunction = () => {
    console.log(1);
    }

  myFunction();
}
myFunction2();
// OUTPUT
// 2
// 1

ES6还提供了一种新的替代方案promises

示例:

let myPromise = new Promise((resolve, reject) => {
  setTimeout(function(){
    resolve(1);
  }, 250);
});

console.log(2);
myPromise.then((successMessage) => {
  console.log(successMessage);
});
// OUTPUT
// 2
// 1

ES8提供了一个更好的选择(虽然它只是基于承诺的语法糖)但你可以使用async函数等待。

示例:

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}


async function add1(x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
}

add1(10).then(v => {
  console.log(v);  // prints 60 after 4 seconds.
});

请记住,您可能需要使用Babel来转换您的js才能与所有浏览器兼容。