2017-02-08 18 views
0

Я использую Javascript-обещание api, но моя функция внутри не выполняется;Функция Javascript внутри Promise.prototype.then не выполняется

//defining a class Test 
var Test=function(){ 
    var x="hello from x"; 
} 

//Adding a method with Test class 
Test.prototype.someFn=function(){ 
    console.log("This is from somefn"); 
} 

//Adding another function  
Test.prototype.anotherFn=function(){ 
    var self=this; 
    var p=new Promise(
     function(){ 
     self.someFn(); 
    }) 

    p.then(
     function(){ 
      console.log("From anotherfn p.then"); 
    }) 
} 

И, наконец, называя это следующим образом;

var t=new Test(); 
t.anotherFn(); 

Выход подобен;

This is from somefn 

Почему «From anotherfn p.then» не печатается. Любое предложение пожалуйста.

+0

Вы посмотрели документацию конструктора Promise? –

+0

Обещание никогда не выполняется, поскольку вы не показываете, где вы запускаете 'p.resolve (valueToResolveWith);' Таким образом, ваша тогда функция никогда не будет запущена. – Shilly

ответ

3

Вы никогда не разрешаете обещание.

Изменить

var p=new Promise(
    function(){ 
    self.someFn(); 
}) 

в

var p = new Promise(function(resolve, reject) { 
    self.someFn(); 
    resolve(); 
}); 

См Creating a Promise in the MDN

Обратите внимание, что вы не должны обернуть синхронную функцию внутри обещание. Предполагая, что someFn будет асинхронным, тогда обещание должно быть возвращено этой точке.

+0

Хорошо, теперь я получил улов. Благодарю. –

+0

Да, на самом деле я привел этот пример. Но в реальности я называю ajax внутренним обещанием. –

+1

Затем будьте осторожны, чтобы решить (или отклонить) обещание в обратном вызове, который вы передаете функции ajax, а не после вызова функции ajax. –

 Смежные вопросы

  • Нет связанных вопросов^_^