[英]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.