2017-04-24 50 views
0

以下两个函数交换承诺解析数据。第二个函数应该将对象返回到第一个函数的内部承诺,但它不会。JS承诺未按预期解决

let functionA = function (stuff) { 
var responseToGet; 
return fetch(someURL 
{ 
    method: 'GET', 
    headers: {headers}, 
}) 
.then((resp) => { 
    responseToGet = resp; 
    return functionB(responseToGet) 
}) 
.then((respFromB) => { 
    console.log('respFromB', respFromB); // WHY IS THIS UNDEFINED INSTEAD OF TRUE/FALSE ? 
    if (respFromB.status) 
     return null; 
    else 
     return respFromB.jsonObj; 
}) 
.catch((error) => { 
    console.log(error); 
});} 



let functionB = function(response) 
{ 
response.json().then((r2) => { 
    if (something) 
     return Promise.resolve({status: true, jsonObj: null}); 
    else 
     return Promise.resolve({status: false, jsonObj: r2}); 
}) 
.done();} 
+1

你'functionB'不'return'什么。 – Bergi

+0

什么是'.done()'调用? – Bergi

+0

@Bergi .done就像.then和.catch,但是它可以在没有任何异常抛出的情况下成功解析。 你可以修改它来获得我期待的结果吗? –

回答

1

你不需要调用'done'函数。 刚刚从functionB

返回一个承诺

例子:

var functionA = function (stuff) { 
    var responseToGet; 
    return fetch("http://httpbin.org/gzip", 
     { 
      method: 'GET', 
      headers: {} 
     }) 
     .then(function (resp) { 
      responseToGet = resp; 
      return functionB(responseToGet) 
     }).then(function (respFromB) { 
      console.log('respFromB', respFromB); // WHY IS THIS UNDEFINED INSTEAD OF TRUE/FALSE ? 
      if (respFromB.status) 
       return null; 
      else 
       return respFromB.jsonObj; 
     }).catch(function (error) { 
      console.log(error); 
     }); 
} 

var functionB = function (response) { 
    var promise = response.json().then(function (r2) { 
     if (r2) 
      return Promise.resolve({status: true, jsonObj: null}); 
     else 
      return Promise.resolve({status: false, jsonObj: r2}); 
    }); 

    return promise; 
} 
+0

谢谢!这工作。 .done()是这里的罪魁祸首。 –