2015-02-02 3 views
3

Я пытаюсь создать следующие синтаксисы обещаний:Обещание, которое возвращает обещание?

Я хочу, чтобы вторичный then был вызван после функции post, как я могу это сделать?

randomBytes.then(function() { 
    return requestPromise.post(....); 
}).then(function() { 
    // I want this part to be called after the POST 
}); 
+8

Если 'requestPromise.post' возвращает Promise, то ваш код должен работать так, как вы хотите. – dfsq

+0

Можете ли вы разместить больше кода? Вы используете функцию $ http? –

+1

Это не «обещание, которое возвращает обещание». Обещания ничего не возвращают. Они вызывают обработчики, указанные в вызовах 'then'. Таким образом, правильное описание здесь - «обработчик обещаний, который возвращает обещание», что, как говорили другие, отлично и четко определено в спецификации обещаний. Так что вы написали, если прекрасно. Вы попробовали? Какой у Вас вопрос? –

ответ

3

Тот факт, это уже работает (как комментарий говорит - если .post возвращается обещание) в значительной степени точка then - это позволяет ждать вещи.

Если вы возвращаете обещание then, цепь предположить его состояние и, таким образом, будет вызывать только следующие сегменты после завершения.

randomBytes.then(function() { 
    return requestPromise.post(....); 
}).then(function() { 
    // WILL ALWAYS BE CALLED AFTER THE POST 
}); 
0

он должен работать. , и вы можете добавить «затем», чтобы получить значение столбца;

randomBytes.then(function() { 
    return requestPromise.post(....).then((value,...)=>{return value;}); 
}).then(function(value) { 
    //console.log(value); 
}); 
+0

Добавленная часть '.then ((value, ...') добавлена ​​избыточно. (Если вы собираетесь писать такую ​​функцию, вы можете сделать это более компактно как 'value => value', когда вы напишете ее таким образом , становится более очевидным, что он ничего не выполняет.) –

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