簡體   English   中英

從.apply方法返回一個承諾

[英]return a promise from .apply method

我是諾言的新手,並試圖我的想法纏在應該很簡單的地方。 也許有人可以用它來我的頭!

我有以下兩個功能:

//an arbitrary method that runs on delay to mimic an async process
    method1 = function( _value, _callback ){
      setTimeout(function(){ 
        console.log('dependency1_resolved');
        _callback.apply(this, [{valIs:_value}]);
      }.bind(this), (Math.random() * 1000));
    };

    //something that can simple return the object
    function returnVal(x){
       console.log(x); //this logs 'Object {valIs: 4}'
       return x;
    }

由於它具有異步特性,因此我希望運行此函數,以保證稍后在代碼中使用(甚至可以在以后使用)。

這是我的承諾:

var promise = new Promise(
  function(resolve, reject) {
    var x = method1(4, returnVal);
    resolve(x);
  }
);

promise.then(function(val) {
  console.log(val); // undefined
  return val;
});
console.log(promise); //Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}

這與第一個函數中的.apply方法有關嗎? 我想念什么? 有人可以打我嗎?

您的returnVal回調實際上不執行任何操作。

相反,您實際上需要傳遞一個接受該值的回調:

var promise = new Promise(
  function(resolve, reject) {
    method1(4, function(x) { resolve(x); });
  }
);

您也可以將自己resolve為回調:

var promise = new Promise(
  function(resolve, reject) {
    method1(4, resolve);
  }
);

您的method1不會返回任何內容,這就是為什么x未定義的原因。 returnVal回調不返回的東西是微不足道的,它的返回值被簡單地忽略method1

您需要調用resolve作為回調,以使代碼正常工作:

new Promise(
  function(resolve, reject) {
    var x = method1(4, resolve);
  }
).then(function(val) {
  console.log(val); // undefined
  return val;
});

另請參閱如何返回異步調用的響應?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM