从承诺中返回然后()

2022-08-30 01:22:51

我有一个像这样的javascript代码:

function justTesting() {
  promise.then(function(output) {
    return output + 1;
  });
}

var test = justTesting();

我总是得到一个未定义的var测试值。我认为这是因为承诺尚未解决。有一种方法可以从承诺中返回值?


答案 1

当您从回调中返回某些内容时,这有点神奇。如果返回一个值,则使用该值调用下一个值。但是,如果您返回类似 promise 的东西,则下一个会等待它,并且仅在该 promise 解决(成功/失败)时调用。then()then()then()

资料来源:https://web.dev/promises/#queuing-asynchronous-actions


答案 2

要使用 promise,您必须调用创建 promise 的函数,或者您必须自己创建一个。你并没有真正描述你真正想要解决的问题,但以下是你自己如何做出承诺:

function justTesting(input) {
    return new Promise(function(resolve, reject) {
        // some async operation here
        setTimeout(function() {
            // resolve the promise with some value
            resolve(input + 10);
        }, 500);
    });
}

justTesting(29).then(function(val) {
   // you access the value from the promise here
   log(val);
});

// display output in snippet
function log(x) {
    document.write(x);
}

或者,如果您已经有一个返回 promise 的函数,则可以使用该函数并返回其 promise:

// function that returns a promise
function delay(t) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      resolve();
    }, t);
  });
}

function justTesting(input) {
  return delay(100).then(function() {
    return input + 10;
  });
}

justTesting(29).then(function(val) {
  // you access the value from the promise here
  log(val);
});

// display output in snippet
function log(x) {
  document.write(x);
}