Javascript 在给定场景中,实现承诺的最佳方式是什么?

Javascript 在给定场景中,实现承诺的最佳方式是什么?,javascript,jquery,promise,angular-promise,gameclosure,Javascript,Jquery,Promise,Angular Promise,Gameclosure,我使用D.js作为javascript应用程序的promise库。 以下是我的示例代码: function getData(deferred) { var data_one; // getInfo is returning a promise for async task getInfo() .then(function (resp_one) { data_one = resp_one; // getInfo2 is also returning an

我使用D.js作为javascript应用程序的promise库。 以下是我的示例代码:

function getData(deferred) {
  var data_one;

  // getInfo is returning a promise for async task
  getInfo()
   .then(function (resp_one) {
      data_one = resp_one;
      // getInfo2 is also returning another promise
      return getInfo2();
   })
   .then(function (resp_two) {
     deferred.resolve('prefix' + data_one + resp_two);
   });
};

function sample () {
  var d = D(),
    data = localStorage.getItem('key');

  if (data) {
    d.resolve(data);
  } else {
    getData(d);
  }
  return d.promise;
}

sample().then(function (data) {
  //do something with data.
});
我正在调用示例函数。示例函数和子函数中的实现是否遵循承诺的编码标准? 我对promises不熟悉,将延迟对象传递给其他函数以解决/拒绝是否好?? 有没有更好的方法来实现上述功能


提前感谢。

如果您以更自然的方式使用承诺,您似乎可以改进代码

首先,如果
getData
返回一个承诺,那么您就不必传递
deferred
,这被认为是反模式的。只需返回
getInfo()

另外,在
示例
函数中,如果您的
数据
可能已经可用,则可以方便地使用
D.promisify
方法返回带有非承诺值的已解决承诺:

function getData() {
    var data_one;
    return getInfo().then(function (resp_one) {
        data_one = resp_one;
        return getInfo2();
    })
    .then(function (resp_two) {
        return 'prefix' + data_one + resp_two;
    });
};

function sample() {
    var data = localStorage.getItem('key');
    return data ? D.promisify(data) : getData();
}

sample().then(function (data) {
    //do something with data.
});

嗨,谢谢你的快速回复。我的scnerio有一点改动。我修改了getData方法。请调查一下。很抱歉给您带来不便。:)