如何在es6 promise中传递变量然后回调到外部

时间:2017-06-21 13:14:04

标签: javascript asynchronous ecmascript-6 promise

代码在这里:

function square() {
  let record = 10;
  new Promise(function(resolve, reject) {
    // A mock async action using setTimeout
    setTimeout(function() { resolve(record); }, 3000);
  })
    .then(function(data) { 
      console.log('first then: ', data);
      return data * data;
    });
  return record;
 }

function submit() {
  // ...
  const result = square(); // => still 10
  // finalHandler(result);
}
submit();

我使用setTimeout来模拟我必须提供的一个异步过程。当我调用submit时,result传递给finalHandler仍然是初始值10.但是我更新的结果是什么,即100。如何修改squaresubmit功能?

1 个答案:

答案 0 :(得分:1)

您需要通过返回promise来使square异步:

function square() {
  let record = 10;
  return new Promise(function(resolve, reject) {
    // A mock async action using setTimeout
    setTimeout(function() { resolve(record); }, 3000);
  })
    .then(function(data) { 
      console.log('first then: ', data);
      return data * data;
    });
 }

function submit() {
  // ...
  square()
     .then(result => finalHandler(result);
}
submit();